--- loncom/publisher/lonpublisher.pm 2007/09/24 13:59:09 1.229
+++ loncom/publisher/lonpublisher.pm 2009/03/26 11:27:26 1.254
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Publication Handler
#
-# $Id: lonpublisher.pm,v 1.229 2007/09/24 13:59:09 www Exp $
+# $Id: lonpublisher.pm,v 1.254 2009/03/26 11:27:26 bisitz Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -118,11 +118,14 @@ use Apache::File;
use File::Copy;
use Apache::Constants qw(:common :http :methods);
use HTML::LCParser;
+use HTML::Entities;
+use Encode::Encoder;
use Apache::lonxml;
use Apache::loncacc;
use DBI;
use Apache::lonnet;
use Apache::loncommon();
+use Apache::lonhtmlcommon;
use Apache::lonmysql;
use Apache::lonlocal;
use Apache::loncfile;
@@ -143,6 +146,8 @@ my $cudom;
my $registered_cleanup;
my $modified_urls;
+my $lock;
+
=pod
=item B $title:".
- " $title:".
- " $title:".
- ' $KEYWORDS:
- $keywords_help
-
-
- ".&mt('Abstract').":".
- "
'.&mt('No file').': '.
- &Apache::loncfile::display($fn).'';
+ return '
'.&mt('Processed file').': '.
- &Apache::loncfile::display($fn).'';
+ return '
".
- '';
+ return "\n".&Apache::lonhtmlcommon::row_title($title)
+ .''
+ .&Apache::lonhtmlcommon::row_closure($noline);
}
sub text_with_browse_field {
- my ($title,$name,$value,$restriction)=@_;
+ my ($title,$name,$value,$restriction,$noline)=@_;
$value=~s/^\s+//gs;
$value=~s/\s+$//gs;
$value=~s/\s+/ /gs;
$title=&mt($title);
$env{'form.'.$name}=$value;
- return "\n
".
- ''.
- 'Select '.
- 'Search';
-
+ return "\n".&Apache::lonhtmlcommon::row_title($title)
+ .''
+ .'
'
+ .''
+ .&mt('Select')
+ .' '
+ .''
+ .&mt('Search')
+ .''
+ .&Apache::lonhtmlcommon::row_closure($noline);
}
sub hiddenfield {
@@ -370,8 +381,8 @@ sub selectbox {
} else {
$env{'form.'.$name}=$idlist[0];
}
- my $selout="\n
'.&Apache::lonhtmlcommon::row_closure();
+ return $selout;
}
sub select_level_form {
@@ -663,6 +675,7 @@ sub fix_ids_and_indices {
"Max Index: $maxindex (min 10)\n";
}
my $outstring='';
+ my $responsecounter=1;
my @parser;
$parser[0]=HTML::LCParser->new(\$content);
$parser[-1]->xml_mode(1);
@@ -678,6 +691,11 @@ sub fix_ids_and_indices {
next;
}
if ($lctag eq 'base') { next; }
+ if (($lctag eq 'part') || ($lctag eq 'problem')) {
+ $responsecounter=0;
+ }
+ if ($lctag=~/response$/) { $responsecounter++; }
+ if ($lctag eq 'import') { $responsecounter++; }
my %parms=%{$token->[2]};
$counter=$addid{$tag};
if (!$counter) { $counter=$addid{$lctag}; }
@@ -773,7 +791,7 @@ sub fix_ids_and_indices {
}
if (!$endtag) { if ($token->[4]=~m:/>$:) { $endtag=' /'; }; }
$outstring.='<'.$tag.$newparmstring.$endtag.'>';
- if ($lctag eq 'm' || $lctag eq 'script'
+ if ($lctag eq 'm' || $lctag eq 'script' || $lctag eq 'answer'
|| $lctag eq 'display' || $lctag eq 'tex') {
$outstring.=&get_all_text_unbalanced('/'.$lctag,\@parser);
}
@@ -782,7 +800,12 @@ sub fix_ids_and_indices {
unless ($token->[1] eq 'allow') {
$outstring.=''.$token->[1].'>';
}
- }
+ }
+ if ((($token->[1] eq 'part') || ($token->[1] eq 'problem'))
+ && (!$responsecounter)) {
+ my $outstring=''.&mt('Found [_1] without responses. This resource cannot be published.',$token->[1]).'';
+ return ($outstring,1);
+ }
} else {
$outstring.=$token->[1];
}
@@ -825,21 +848,22 @@ sub store_metadata {
# Determine if the table exists
my $status = &Apache::lonmysql::check_table('metadata');
if (! defined($status)) {
- $error='WARNING: Cannot connect to '.
- 'database!';
+ $error=''
+ .&mt('WARNING: Cannot connect to database!')
+ .'';
&Apache::lonnet::logthis($error);
return ($error,undef);
}
if ($status == 0) {
# It would be nice to actually create the table....
- $error ='WARNING: The metadata table does not '.
- 'exist in the LON-CAPA database.';
+ $error =''
+ .&mt('WARNING: The metadata table does not exist in the LON-CAPA database!')
+ .'';
&Apache::lonnet::logthis($error);
return ($error,undef);
}
my $dbh = &Apache::lonmysql::get_dbh();
- if (($metadata{'obsolete'}) || ($metadata{'copyright'} eq 'priv') ||
- ($metadata{'copyright'} eq 'custom')) {
+ if (($metadata{'obsolete'}) || ($metadata{'copyright'} eq 'priv')) {
# remove this entry
my $delitem = 'url = '.$dbh->quote($metadata{'url'});
$status = &LONCAPA::lonmetadata::delete_metadata($dbh,undef,$delitem);
@@ -849,8 +873,9 @@ sub store_metadata {
\%metadata);
}
if (defined($status) && $status ne '') {
- $error='Error occured saving new values in '.
- 'metadata table in LON-CAPA database';
+ $error=''
+ .&mt('Error occurred saving new values in metadata table in LON-CAPA database!')
+ .'';
&Apache::lonnet::logthis($error);
&Apache::lonnet::logthis($status);
return ($error,undef);
@@ -870,17 +895,21 @@ sub checkonthis {
'return_only_error_and_warning_counts' => 1));
my ($errorcount,$warningcount)=split(':',$result);
if (($errorcount) || ($warningcount)) {
- $r->print('
'.$uri.': ');
- if ($errorcount) {
- $r->print(''.
- $errorcount.' '.
- &mt('error(s)').' ');
- }
- if ($warningcount) {
- $r->print(''.
- $warningcount.' '.
- &mt('warning(s)').'');
- }
+ $r->print(''.&mt('Warnings and Errors').'
');
+ $r->print(''.$uri.':');
+ $r->print('');
+ if ($warningcount) {
+ $r->print('
');
} else {
#$r->print(''.&mt('ok').'');
}
@@ -919,7 +948,7 @@ backup copies, performs any automatic pr
especially for rat and ssi files),
Returns a 2 element array, the first is the string to be shown to the
-user, the second is an error code, either 1 (an error occured) or 0
+user, the second is an error code, either 1 (an error occurred) or 0
(no error occurred)
I'.&mt('Dependencies').'
';
+ my $outdep=''; # Collect dependencies output data
my $allowstr='';
- foreach (sort(keys(%allow))) {
- my $thisdep=$_;
+ foreach my $thisdep (sort(keys(%allow))) {
if ($thisdep !~ /[^\s]/) { next; }
+ if ($thisdep =~/\$/) {
+ $outdep.='
'
+ .&mt('You likely need to explicitly allow access to all possible dependencies using the [_1]-tag.','<allow>')
+ ."
';
- if ($thisdep!~/\*/ && $thisdep!~m|^/adm/|) {
- $scrout.='';
+ $outdep.='
';
+ }
+
+ if ($outdep) {
+ $scrout.=''.&mt('Dependencies').'
'
+ .$outdep
}
$outstring=~s/\n*(\<\/[^\>]+\>[^<]*)$/$allowstr\n$1\n/s;
@@ -1022,8 +1062,8 @@ sub publish {
my %oldparmstores=();
unless ($batch) {
- $scrout.=''.&mt('Metadata Information').' ' .
- Apache::loncommon::help_open_topic("Metadata_Description")
+ $scrout.='
'.&mt('Metadata').' ' .
+ &Apache::loncommon::help_open_topic("Metadata_Description")
. '
';
}
@@ -1146,17 +1186,22 @@ sub publish {
$textonly=~s/\
-
END
- $keywordout.='
';
+ $keywordout.=&Apache::loncommon::end_data_table_row()
+ .&Apache::loncommon::end_data_table()
+ .&Apache::lonhtmlcommon::row_closure();
$intr_scrout.=$keywordout;
@@ -1242,28 +1311,24 @@ END
$intr_scrout.=&textfield('Notes','notes',$metadatafields{'notes'});
- $intr_scrout.=
- "\n';
+ $keywordout.="\n".&Apache::lonhtmlcommon::row_title(&mt('Keywords'))
+ .$keywords_help
+ .''
+ .''
+ .'
'
+ .&Apache::loncommon::start_data_table();
+ my $cols_per_row = 10;
my $colcount=0;
+ my $wordcount=0;
+ my $numkeywords = scalar(keys(%keywords));
- foreach (sort keys %keywords) {
- $keywordout.='';
- if ($colcount>10) {
- $keywordout.=" \n";
- $colcount=0;
- }
- $colcount++;
+ foreach my $word (sort(keys(%keywords))) {
+ if ($colcount == 0) {
+ $keywordout .= &Apache::loncommon::start_data_table_row();
+ }
+ $colcount++;
+ $wordcount++;
+ if (($wordcount == $numkeywords) && ($colcount < $cols_per_row)) {
+ my $colspan = 1+$cols_per_row-$colcount;
+ $keywordout .= ' ';
+ } else {
+ $keywordout .= ' ';
+ }
+ $keywordout.=' ';
+ if ($colcount == $cols_per_row) {
+ $keywordout.=&Apache::loncommon::end_data_table_row();
+ $colcount=0;
+ }
}
+ if ($colcount > 0) {
+ $keywordout .= &Apache::loncommon::end_data_table_row();
+ }
+
$env{'form.keywords'}=~s/\,$//;
- $keywordout.='
".
- '
". - &mt('Lowest Grade Level').':'. - "
". - &mt('Highest Grade Level').':'. - "
Creating old version '.$maxversion.'
'); + $r->print(''.&mt('Creating old version [_1]',$maxversion).'
'); print $logfile "\nCreating old version ".$maxversion."\n"; my $copyfile=$srcd.'/'.$srcf.'.'.$maxversion.'.'.$srct; @@ -1694,14 +1765,14 @@ sub phasetwo { $r->print( ''.
+ ''.
' '.
&mt('Back to Source Directory').' '.&mt('Done').' '.&mt('Done').''.&mt('Publishing').' '.$thisdisfn.'
');
+ $r->print(''
+ .&mt('Publishing [_1]'
+ ,''.$thisdisfn.'')
+ .'
'
+ );
# phase one takes
# my ($source,$target,$style,$batch)=@_;
@@ -1806,9 +1882,11 @@ sub publishdirectory {
&checkbox('pubrec','include subdirectories').
&checkbox('forcerepub','force republication of previously published files').
&checkbox('obsolete','make file(s) obsolete').
- &checkbox('forceoverride','force directory level catalog information over existing').
+ &checkbox('forceoverride','force directory level metadata over existing').
'
');
+ $lock=0;
} else {
+ unless ($lock) { $lock=&Apache::lonnet::set_lock(&mt('Publishing [_1]',$fn)); }
# actually publish things
opendir(DIR,$fn);
my @files=sort(readdir(DIR));
@@ -1875,7 +1953,7 @@ sub defaultmetapublish {
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
- $r->print(&Apache::loncommon::start_page('Catalog Information Publication'));
+ $r->print(&Apache::loncommon::start_page('Metadata Publication'));
# ---------------------------------------------------------------- Write Source
my $copyfile=$target;
@@ -1910,7 +1988,7 @@ sub defaultmetapublish {
# ------------------------------------------------------------------- Link back
my $link=$fn;
$link=~s/^\/home\/$cuname\/public_html\//\/priv\/$cuname\//;
- $r->print("".&mt('Back to Catalog Information').'');
+ $r->print("".&mt('Back to Metadata').'');
$r->print(&Apache::loncommon::end_page());
return OK;
}
@@ -2094,28 +2172,57 @@ sub handler {
my $thistype=$1;
my $thisembstyle=&Apache::loncommon::fileembstyle($thistype);
if ($thistype eq 'page') { $thisembstyle = 'rat'; }
- $r->print(''.&mt('Publishing').' '.
- &Apache::loncommon::filedescription($thistype).' ');
+ $r->print('
ENDCAPTION
- $r->print(''.&mt('Target').': '.
- $thisdistarget.''
+ .&mt('Publishing [_1]'
+ ,''.$thisdisfn.'')
+ .'
'
+ );
+
+ $r->print(''.&mt('Resource Details').'
');
+
+ $r->print(&Apache::lonhtmlcommon::start_pick_box());
+
+ $r->print(&Apache::lonhtmlcommon::row_title(&mt('Type'))
+ .&Apache::loncommon::filedescription($thistype)
+ .&Apache::lonhtmlcommon::row_closure()
+ );
+
+ $r->print(&Apache::lonhtmlcommon::row_title(&mt('Link to Resource'))
+ .''
+ );
$r->print(<
');
-
+ $r->print(''
+ .&Apache::lonhtmlcommon::row_closure()
+ );
+
+ $r->print(&Apache::lonhtmlcommon::row_title(&mt('Target'))
+ .''.$thisdistarget.''
+ );
if (($cuname ne $env{'user.name'})||($cudom ne $env{'user.domain'})) {
- $r->print('