--- loncom/publisher/lonpublisher.pm 2003/12/22 21:57:25 1.148
+++ loncom/publisher/lonpublisher.pm 2004/05/21 19:27:02 1.167
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Publication Handler
#
-# $Id: lonpublisher.pm,v 1.148 2003/12/22 21:57:25 albertel Exp $
+# $Id: lonpublisher.pm,v 1.167 2004/05/21 19:27:02 albertel 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,8 @@ use Apache::loncommon();
use Apache::lonmysql;
use Apache::lonlocal;
use Apache::loncfile;
+use LONCAPA::lonmetadata;
+use Apache::lonmsg;
use vars qw(%metadatafields %metadatakeys);
my %addid;
@@ -219,7 +203,10 @@ sub metaeval {
$newentry=~s/^\s*//;
if ($newentry !~m|^/res|) { $newentry=$prefix.$newentry; }
}
- unless ($metadatafields{$unikey}=~/\w/) {
+# actually store
+ if ( $entry eq 'rule' && exists($metadatafields{$unikey})) {
+ $metadatafields{$unikey}.=','.$newentry;
+ } else {
$metadatafields{$unikey}=$newentry;
}
}
@@ -335,23 +322,28 @@ sub textfield {
$value=~s/\s+$//gs;
$value=~s/\s+/ /gs;
$title=&mt($title);
- my $uctitle=uc($title);
- return "\n
$uctitle:".
+ $ENV{'form.'.$name}=$value;
+ return "\n $title:".
"
".
' ';
}
sub hiddenfield {
my ($name,$value)=@_;
+ $ENV{'form.'.$name}=$value;
return "\n".' ';
}
sub selectbox {
my ($title,$name,$value,$functionref,@idlist)=@_;
$title=&mt($title);
- my $uctitle=uc($title);
$value=(split(/\s*,\s*/,$value))[-1];
- my $selout="\n$uctitle:".
+ if (defined($value)) {
+ $ENV{'form.'.$name}=$value;
+ } else {
+ $ENV{'form.'.$name}=$idlist[0];
+ }
+ my $selout="\n $title:".
'
';
foreach (@idlist) {
$selout.='';
}
+sub select_level_form {
+ my ($value,$name)=@_;
+ $ENV{'form.'.$name}=$value;
+ if (!defined($value)) { $ENV{'form.'.$name}=0; }
+ return &Apache::loncommon::select_level_form($value,$name);
+}
#########################################
#########################################
@@ -786,7 +784,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');
@@ -803,17 +801,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=&LONCAPA::lonmetadata::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 ';
@@ -907,11 +933,11 @@ sub publish {
$allowstr.="\n".' ';
}
$scrout.=' ';
- unless ($thisdep=~/\*/) {
+ if ($thisdep!~/\*/ && $thisdep!~m|^/adm/|) {
$scrout.='';
}
$scrout.=''.$thisdep.' ';
- unless ($thisdep=~/\*/) {
+ if ($thisdep!~/\*/ && $thisdep!~m|^/adm/|) {
$scrout.=' ';
if (
&Apache::lonnet::getfile($Apache::lonnet::perlvar{'lonDocRoot'}.'/'.
@@ -932,11 +958,6 @@ sub publish {
}
$outstring=~s/\n*(\<\/[^\>]+\>)\s*$/$allowstr\n$1\n/s;
-### FIXME: is this really what we want?
-# I dont' think so, to will corrupt any UTF-8 resources at least,
-# and any encoding other than ISO-8859-1 will probably break
- #Encode any High ASCII characters
- #$outstring=&HTML::Entities::encode($outstring,"\200-\377");
# ------------------------------------------------------------- Write modified.
{
@@ -977,14 +998,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;
@@ -1001,6 +1015,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)
@@ -1024,6 +1042,7 @@ sub publish {
# ------------------------------------------ See if anything new in file itself
$allmeta=&parseformeta($source,$style);
+
}
@@ -1088,27 +1107,30 @@ sub publish {
}
# --------------------------------------------------- Now we also have keywords
# =============================================================================
-# INTERACTIVE MODE
-#
- unless ($batch) {
- $scrout.=
- '