--- loncom/publisher/lonpublisher.pm 2003/12/22 22:09:06 1.149 +++ 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.149 2003/12/22 22:09:06 www Exp $ +# $Id: lonpublisher.pm,v 1.156 2003/12/28 20:12:59 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -126,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; @@ -767,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'); @@ -784,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'; @@ -958,9 +987,6 @@ 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; # ------------------------------------------------ Check out directory hierachy @@ -1144,6 +1170,21 @@ END $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'}; @@ -1161,7 +1202,7 @@ END $metadatafields{'creationdate'}=time; } $scrout.=&hiddenfield('creationdate', - &Apache::loncommon::unsqltime($metadatafields{'creationdate'})); + &Apache::lonmysql::unsqltime($metadatafields{'creationdate'})); $scrout.=&hiddenfield('lastrevisiondate',time); @@ -1319,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'})) { @@ -1380,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) { @@ -1607,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. @@ -1646,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(); }