--- loncom/publisher/lonpublisher.pm 2004/01/20 23:02:20 1.145.2.1 +++ loncom/publisher/lonpublisher.pm 2003/12/28 20:12:59 1.156 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Publication Handler # -# $Id: lonpublisher.pm,v 1.145.2.1 2004/01/20 23:02:20 albertel Exp $ +# $Id: lonpublisher.pm,v 1.156 2003/12/28 20:12:59 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -25,24 +25,6 @@ # # http://www.lon-capa.org/ # -# -# (TeX Content Handler -# -# 05/29/00,05/30,10/11 Gerd Kortemeyer) -# -# 11/28,11/29,11/30,12/01,12/02,12/04,12/23 Gerd Kortemeyer -# 03/23 Guy Albertelli -# 03/24,03/29,04/03 Gerd Kortemeyer -# 05/03,05/05,05/07 Gerd Kortemeyer -# 06/23,08/07,08/11,8/13,8/17,8/18,8/24,9/26,10/16 Gerd Kortemeyer -# 12/04,12/05 Guy Albertelli -# 12/05 Gerd Kortemeyer -# 12/05 Guy Albertelli -# 12/06,12/07 Gerd Kortemeyer -# 12/25 Gerd Kortemeyer -# YEAR=2002 -# 1/17 Gerd Kortemeyer -# ### ############################################################################### @@ -144,6 +126,7 @@ use Apache::loncommon(); use Apache::lonmysql; use Apache::lonlocal; use Apache::loncfile; +use Apache::lonmeta; use vars qw(%metadatafields %metadatakeys); my %addid; @@ -220,11 +203,7 @@ sub metaeval { if ($newentry !~m|^/res|) { $newentry=$prefix.$newentry; } } # actually store - if ( $entry eq 'rule' && exists($metadatafields{$unikey})) { - $metadatafields{$unikey}.=','.$newentry; - } else { - $metadatafields{$unikey}=$newentry; - } + $metadatafields{$unikey}=$newentry; } } } @@ -270,7 +249,7 @@ sub metaread { my ($logfile,$fn,$prefix)=@_; unless (-e $fn) { print($logfile 'No file '.$fn."\n"); - return '
No file: '. + return '
'.&mt('No file').': '. &Apache::loncfile::display($fn).''; } print($logfile 'Processing '.$fn."\n"); @@ -280,7 +259,7 @@ sub metaread { $metastring=join('',<$metafh>); } &metaeval($metastring,$prefix); - return '
Processed file: '. + return '
'.&mt('Processed file').': '. &Apache::loncfile::display($fn).''; } @@ -631,7 +610,7 @@ sub fix_ids_and_indices { join(', ',@duplicatedids)); if ($duplicateids) { print $logfile "Duplicate ID(s) exist, ".join(', ',@duplicatedids)."\n"; - my $outstring='Unable to publish file, it contains duplicated ID(s), ID(s) need to be unique. The duplicated ID(s) are: '.join(', ',@duplicatedids).''; + my $outstring=''.&mt('Unable to publish file, it contains duplicated ID(s), ID(s) need to be unique. The duplicated ID(s) are').': '.join(', ',@duplicatedids).''; return ($outstring,1); } if ($needsfixup) { @@ -696,8 +675,15 @@ sub fix_ids_and_indices { } if ($lctag eq 'applet') { my $codebase=''; - if (defined($parms{'codebase'})) { - my $oldcodebase=$parms{'codebase'}; + my $havecodebase=0; + foreach my $key (keys(%parms)) { + if (lc($key) eq 'codebase') { + $codebase=$parms{$key}; + $havecodebase=1; + } + } + if ($havecodebase) { + my $oldcodebase=$codebase; unless ($oldcodebase=~/\/$/) { $oldcodebase.='/'; } @@ -711,14 +697,13 @@ sub fix_ids_and_indices { } $allow{&absoluteurl($codebase,$target).'/*'}=1; } else { - foreach ('archive','code','object') { - if (defined($parms{$_})) { - my $oldurl=$parms{$_}; + foreach my $key (keys(%parms)) { + if ($key =~ /(archive|code|object)/i) { + my $oldurl=$parms{$key}; my $newurl=&urlfixup($oldurl,$target); $newurl=~s/\/[^\/]+$/\/\*/; - print $logfile 'Allow: applet '.$_.':'. - $oldurl.' allows '. - $newurl."\n"; + print $logfile 'Allow: applet '.lc($key).':'. + $oldurl.' allows '.$newurl."\n"; $allow{&absoluteurl($newurl,$target)}=1; } } @@ -783,7 +768,7 @@ Returns: (error,status). error is undef ######################################### ######################################### sub store_metadata { - my %metadata = %{shift()}; + my %metadata = @_; my $error; # Determine if the table exists my $status = &Apache::lonmysql::check_table('metadata'); @@ -800,17 +785,45 @@ sub store_metadata { &Apache::lonnet::logthis($error); return ($error,undef); } - # Remove old value from table - $status = &Apache::lonmysql::remove_from_table - ('metadata','url',$metadata{'url'}); - if (! defined($status)) { - $error = 'Error when removing old values from '. - 'metadata table in LON-CAPA database.'; - &Apache::lonnet::logthis($error); - return ($error,undef); + if (($metadata{'obsolete'}) || ($metadata{'copyright'} eq 'priv') || + ($metadata{'copyright'} eq 'custom')) { +# remove this entry + $status=&Apache::lonmysql::remove_from_table + ('metadata','url',$metadata{'url'}); + } else { +# store new data +# adjust some values to metadatadatabase (e.g., "usage" is a reserved word) + $metadata{'creationdate'}= + &Apache::lonmysql::sqltime($metadata{'creationdate'}); + $metadata{'lastrevisiondate'}= + &Apache::lonmysql::sqltime($metadata{'lastrevisiondate'}); + $metadata{'sequsage'}=$metadata{'usage'}; + $metadata{'sequsage_list'}=$metadata{'usage_list'}; + my %newmetadata=(); +# see if we have old entries + my @oldmeta=&Apache::lonmysql::get_rows('metadata', + "url LIKE BINARY '". + $metadata{'url'}."'"); + if ($#oldmeta==0) { +# yes, there is one old entry, transfer to newmetadata + %newmetadata=&Apache::lonmeta::metadata_col_to_hash(@{$oldmeta[0]}); +# remove old entry + $status=&Apache::lonmysql::remove_from_table + ('metadata','url',$metadata{'url'}); + } elsif ($#oldmeta>0) { +# more than one entry fit - how did that happen? + $error='Error occured retrieving old values in '. + 'metadata table in LON-CAPA database: '.$#oldmeta. + ' matches'; + &Apache::lonnet::logthis($error); + return ($error,undef); + } +# store new data on top of it + foreach (keys %metadata) { + $newmetadata{$_}=$metadata{$_}; + } + $status = &Apache::lonmysql::store_row('metadata',\%newmetadata); } - # Store data in table. - $status = &Apache::lonmysql::store_row('metadata',\%metadata); if (! defined($status)) { $error='Error occured storing new values in '. 'metadata table in LON-CAPA database'; @@ -871,7 +884,7 @@ sub publish { my %allow=(); unless ($logfile=Apache::File->new('>>'.$source.'.log')) { - return ('No write permission to user directory, FAIL',1); + return (''.&mt('No write permission to user directory, FAIL').'',1); } print $logfile "\n\n================= Publish ".localtime()." Phase One ================\n".$ENV{'user.name'}.'@'.$ENV{'user.domain'}."\n"; @@ -895,7 +908,7 @@ sub publish { if ($error) { return ($outstring,$error); } # ------------------------------------------------------------ Construct Allows - $scrout.='

Dependencies

'; + $scrout.='

'.&mt('Dependencies').'

'; my $allowstr=''; foreach (sort(keys(%allow))) { my $thisdep=$_; @@ -913,7 +926,7 @@ sub publish { if ( &Apache::lonnet::getfile($Apache::lonnet::perlvar{'lonDocRoot'}.'/'. $thisdep.'.meta') eq '-1') { - $scrout.= ' - Currently not available'. + $scrout.= ' - '.&mt('Currently not available'). ''; } else { my %temphash=(&Apache::lonnet::declutter($target).'___'. @@ -974,14 +987,7 @@ sub publish { $metadatafields{'author'}=~s/\s+/ /g; $metadatafields{'author'}=~s/\s+$//; $metadatafields{'owner'}=$cuname.'@'.$cudom; - $metadatafields{'modifyinguser'}=$ENV{'user.name'}.'@'. - $ENV{'user.domain'}; - $metadatafields{'authorspace'}=$cuname.'@'.$cudom; -# ----------------------------------------------------------- Parse file itself -# read %metadatafields from file itself - - $allmeta=&parseformeta($source,$style); # ------------------------------------------------ Check out directory hierachy my $thisdisfn=$source; @@ -998,6 +1004,10 @@ sub publish { $scrout.=&metaread($logfile,$currentpath.'default.meta',$prefix); $prefix=~s|^\.\./||; } +# ----------------------------------------------------------- Parse file itself +# read %metadatafields from file itself + + $allmeta=&parseformeta($source,$style); # ------------------- Clear out parameters and stores (there should not be any) @@ -1090,7 +1100,7 @@ sub publish { unless ($batch) { $scrout.= '
'. - '

'. + '

'. &hiddenfield('phase','two'). &hiddenfield('filename',$ENV{'form.filename'}). &hiddenfield('allmeta',&Apache::lonnet::escape($allmeta)). @@ -1102,6 +1112,9 @@ sub publish { # --------------------------------------------------- Scan content for keywords my $keywords_help = Apache::loncommon::help_open_topic("Publishing_Keywords"); + my $KEYWORDS=&mt('KEYWORDS'); + my $CheckAll=&mt('check all'); + my $UncheckAll=&mt('uncheck all'); my $keywordout=<<"END"; -

KEYWORDS: +

$KEYWORDS: $keywords_help - - + +


END @@ -1150,13 +1163,28 @@ END $scrout.=&textfield('Notes','notes',$metadatafields{'notes'}); $scrout.= - "\n

ABSTRACT:". + "\n

".&mt('ABSTRACT').":". "


". '

'; $source=~/\.(\w+)$/; + + $scrout.= + "\n

". + uc(&mt('Lowest Grade Level:')). + "


". + &Apache::loncommon::select_level_form($metadatafields{'lowestgradelevel'},'lowestgradelevel'). + "\n

". + uc(&mt('Highest Grade Level:')). + "


". + &Apache::loncommon::select_level_form($metadatafields{'highestgradelevel'},'highestgradelevel'). + &textfield('Standards','standards',$metadatafields{'standards'}); + + + + $scrout.=&hiddenfield('mime',$1); my $defaultlanguage=$metadatafields{'language'}; @@ -1174,7 +1202,7 @@ END $metadatafields{'creationdate'}=time; } $scrout.=&hiddenfield('creationdate', - &Apache::loncommon::unsqltime($metadatafields{'creationdate'})); + &Apache::lonmysql::unsqltime($metadatafields{'creationdate'})); $scrout.=&hiddenfield('lastrevisiondate',time); @@ -1332,12 +1360,18 @@ sub phasetwo { $metadatafields{'lastrevisiondate'}=$ENV{'form.lastrevisiondate'}; $metadatafields{'owner'}=$ENV{'form.owner'}; $metadatafields{'copyright'}=$ENV{'form.copyright'}; + $metadatafields{'standards'}=$ENV{'form.standards'}; + $metadatafields{'lowestgradelevel'}=$ENV{'form.lowestgradelevel'}; + $metadatafields{'highestgradelevel'}=$ENV{'form.highestgradelevel'}; $metadatafields{'customdistributionfile'}= $ENV{'form.customdistributionfile'}; $metadatafields{'obsolete'}=$ENV{'form.obsolete'}; $metadatafields{'obsoletereplacement'}= $ENV{'form.obsoletereplacement'}; $metadatafields{'dependencies'}=$ENV{'form.dependencies'}; + $metadatafields{'modifyinguser'}=$ENV{'user.name'}.'@'. + $ENV{'user.domain'}; + $metadatafields{'authorspace'}=$cuname.'@'.$cudom; my $allkeywords=$ENV{'form.addkey'}; if (exists($ENV{'form.keywords'})) { @@ -1351,6 +1385,15 @@ sub phasetwo { $allkeywords=~s/^\,//; $metadatafields{'keywords'}=$allkeywords; +# check if custom distribution file is specified + if ($metadatafields{'copyright'} eq 'custom') { + my $file=$metadatafields{'customdistributionfile'}; + unless ($file=~/\.rights$/) { + return + ''.&mt('No valid custom distribution rights file specified, FAIL'). + ''; + } + } { print $logfile "\nWrite metadata file for ".$source; my $mfh; @@ -1384,21 +1427,16 @@ sub phasetwo { $metadatafields{'url'} = $distarget; $metadatafields{'version'} = 'current'; - unless ($metadatafields{'copyright'} eq 'priv') { - my ($error,$success) = &store_metadata(\%metadatafields); - if ($success) { - $r->print('

'.&mt('Synchronized SQL metadata database').'

'); - print $logfile "\nSynchronized SQL metadata database"; - } else { - $r->print($error); - print $logfile "\n".$error; - } + + my ($error,$success) = &store_metadata(%metadatafields); + if ($success) { + $r->print('

'.&mt('Synchronized SQL metadata database').'

'); + print $logfile "\nSynchronized SQL metadata database"; } else { - $r->print('

'. - &mt('Private Publication - did not synchronize database').'

'); - print $logfile "\nPrivate: Did not synchronize data into ". - "SQL metadata database"; + $r->print($error); + print $logfile "\n".$error; } + # ----------------------------------------------------------- Copy old versions if (-e $target) { @@ -1556,6 +1594,7 @@ sub phasetwo { '">'. &mt('Back to Source Directory').'

'); } + return '

'.&mt('Done').'

'; } ######################################### @@ -1610,8 +1649,8 @@ sub publishdirectory { my $resdir= $Apache::lonnet::perlvar{'lonDocRoot'}.'/res/'.$cudom.'/'.$cuname.'/'. $thisdisfn; - $r->print('

Directory '.$thisdisfn.'

'. - 'Target: '.$resdir.'
'); + $r->print('

'.&mt('Directory').' '.$thisdisfn.'

'. + &mt('Target').': '.$resdir.'
'); my $dirptr=16384; # Mask indicating a directory in stat.cmode. @@ -1649,7 +1688,7 @@ sub publishdirectory { if ($publishthis) { &batchpublish($r,$fn.'/'.$filename,$resdir.'/'.$filename); } else { - $r->print('
Skipping '.$filename.'
'); + $r->print('
'.&mt('Skipping').' '.$filename.'
'); } $r->rflush(); } @@ -1855,8 +1894,8 @@ ENDDIFF my ($outstring,$error)=&publish($thisfn,$thistarget,$thisembstyle); $r->print('
'.$outstring); } else { - $r->print('
'); - &phasetwo($r,$thisfn,$thistarget,$thisembstyle,$thisdistarget); + $r->print('
'. + &phasetwo($r,$thisfn,$thistarget,$thisembstyle,$thisdistarget)); } } $r->print('');