--- loncom/interface/lonmeta.pm 2004/04/13 14:42:24 1.64 +++ loncom/interface/lonmeta.pm 2004/04/16 21:43:56 1.73 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Metadata display handler # -# $Id: lonmeta.pm,v 1.64 2004/04/13 14:42:24 matthew Exp $ +# $Id: lonmeta.pm,v 1.73 2004/04/16 21:43:56 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -40,9 +40,6 @@ use Apache::lonlocal; use Apache::lonmysql; use Apache::lonmsg; -# MySQL table columns - -my @columns; # Fetch and evaluate dynamic metadata sub dynamicmeta { @@ -60,6 +57,15 @@ sub dynamicmeta { # # Deal with 'count' separately $Data{'count'} = &access_count($url,$aauthor,$adomain); + # + # Debugging code I will probably need later + if (0) { + &Apache::lonnet::logthis('Dynamic Metadata'); + while(my($k,$v)=each(%Data)){ + &Apache::lonnet::logthis(' "'.$k.'"=>"'.$v.'"'); + } + &Apache::lonnet::logthis('-------------------'); + } return %Data; } @@ -104,53 +110,48 @@ sub authordisplay { # Pretty display sub evalgraph { my $value=shift; - unless ($value) { return ''; } + if (! $value) { + return ''; + } my $val=int($value*10.+0.5)-10; - my $output=''; + my $output='
'; if ($val>=20) { - $output.=''; + $output.=''; } else { - $output.=''. - ''; + $output.=''. + ''; } $output.=''; if ($val>20) { - $output.=''. - ''; + $output.=''. + ''; } else { - $output.=''; + $output.=''; } - $output.='
                  ('.$value.')
'; + $output.=' ('.sprintf("%5.2f",$value).') '; return $output; } sub diffgraph { my $value=shift; - unless ($value) { return ''; } + if (! $value) { + return ''; + } my $val=int(40.0*$value+0.5); my @colors=('#FF9933','#EEAA33','#DDBB33','#CCCC33', '#BBDD33','#CCCC33','#DDBB33','#EEAA33'); - my $output=''; + my $output='
'; for (my $i=0;$i<8;$i++) { if ($val>$i*5) { - $output.=''; + $output.=''; } else { - $output.=''; + $output.=''; } } - $output.='
     ('.$value.')
'; + $output.=' ('.sprintf("%3.2f",$value).') '; return $output; } -# Turn MySQL row into hash -sub metadata_col_to_hash { - my @cols=@_; - my %hash=(); - for (my $i=0; $i<=$#columns; $i++) { - $hash{$columns[$i]}=$cols[$i]; - } - return %hash; -} # The field names sub fieldnames { @@ -192,7 +193,8 @@ sub fieldnames { 'technical' => 'Resource is technically correct', 'avetries' => 'Average number of tries till solved', 'stdno' => 'Total number of students who have worked on this problem', - 'difficulty' => 'Degree of difficulty' + 'difficulty' => 'Degree of difficulty', + 'disc' => 'Degree of discrimination', ); } @@ -200,7 +202,9 @@ sub fieldnames { sub prettyprint { my ($type,$value)=@_; - unless (defined($value)) { return ' '; } + if (! defined($value)) { + return ' '; + } # Title if ($type eq 'title') { return ''.$value.''; @@ -239,7 +243,9 @@ sub prettyprint { return &Apache::loncommon::gradeleveldescription($value); } # Only for advance users below - unless ($ENV{'user.adv'}) { return '- '.&mt('not displayed').' -' }; + if (! $ENV{'user.adv'}) { + return '- '.&mt('not displayed').' -'; + } # File if (($type eq 'customdistributionfile') || ($type eq 'obsoletereplacement') || @@ -247,9 +253,26 @@ sub prettyprint { ($type eq 'comefrom_list') || ($type eq 'sequsage_list')) { return join('
',map { - my $url=&Apache::lonnet::clutter($_); - ''.&Apache::lonnet::gettitle($url).''. - &Apache::lonhtmlcommon::crumbs($url,'preview','',undef,'+0'); + my $url = &Apache::lonnet::clutter($_); + my $title = &Apache::lonnet::gettitle($url); + if ($title eq '') { + $title = 'Untitled'; + if ($url =~ /\.sequence$/) { + $title .= ' Sequence'; + } elsif ($url =~ /\.page$/) { + $title .= ' Page'; + } elsif ($url =~ /\.problem$/) { + $title .= ' Problem'; + } elsif ($url =~ /\.html$/) { + $title .= ' HTML document'; + } elsif ($url =~ m:/syllabus$:) { + $title .= ' Syllabus'; + } + } + $_ = ''.$title.' '. + ''. + ''.$url.''. + '' } split(/\s*\,\s*/,$value)); } # Evaluations @@ -261,17 +284,24 @@ sub prettyprint { return &evalgraph($value); } # Difficulty - if ($type eq 'difficulty') { + if ($type eq 'difficulty' || $type eq 'disc') { return &diffgraph($value); } # List of courses if ($type=~/\_list/) { - return join('
',map { - my %courseinfo=&Apache::lonnet::coursedescription($_); - ''. - $courseinfo{'description'}.''; - } split(/\s*\,\s*/,$value)); + my @Courses = split(/\s*\,\s*/,$value); + my $Str; + foreach my $course (@Courses) { + my %courseinfo = &Apache::lonnet::coursedescription($course); + if (! exists($courseinfo{'num'}) || $courseinfo{'num'} eq '') { + next; + } + if ($Str ne '') { $Str .= '
'; } + $Str .= ''. + $courseinfo{'description'}.''; + } + return $Str; } # No pretty print found return $value; @@ -284,7 +314,9 @@ sub direct { sub selectbox { my ($name,$value,$functionref,@idlist)=@_; - unless (defined($functionref)) { $functionref=\&direct; } + if (! defined($functionref)) { + $functionref=\&direct; + } my $selout='
$bombs - - - ENDBOMBS - } else { - my $displayfile='Catalog Information for '.$disuri; - if ($disuri=~/\/default$/) { - my $dir=$disuri; - $dir=~s/default$//; - $displayfile= - &mt('Default Cataloging Information for Directory').' '. - $dir; - } - my $bodytag= - &Apache::loncommon::bodytag('Edit Catalog Information'); - %Apache::lonpublisher::metadatafields=(); - %Apache::lonpublisher::metadatakeys=(); - &Apache::lonpublisher::metaeval(&Apache::lonnet::getfile($fn)); - $r->print(<print(<Edit Catalog Information $bodytag

$displayfile

ENDEDIT - $r->print(''); - my %lt=&fieldnames(); - foreach ('author','title','subject','keywords','abstract','notes', - 'copyright','customdistributionfile','language', - 'standards', - 'lowestgradelevel','highestgradelevel', - 'obsolete','obsoletereplacement') { - if (defined($ENV{'form.new_'.$_})) { - $Apache::lonpublisher::metadatafields{$_}= - $ENV{'form.new_'.$_}; - } - unless ($Apache::lonpublisher::metadatafields{'copyright'}) { - $Apache::lonpublisher::metadatafields{'copyright'}= - 'default'; - } - $r->print('

'.$lt{$_}.': '. - &prettyinput - ($_,$Apache::lonpublisher::metadatafields{$_}, - 'new_'.$_,'defaultmeta').'

'); - } - if ($ENV{'form.store'}) { - my $mfh; - unless ($mfh=Apache::File->new('>'.$fn)) { - $r->print('

'. - &mt('Could not write metadata').', '. - &mt('FAIL').''); - } else { - foreach (sort keys %Apache::lonpublisher::metadatafields) { - unless ($_=~/\./) { - my $unikey=$_; - $unikey=~/^([A-Za-z]+)/; - my $tag=$1; - $tag=~tr/A-Z/a-z/; - print $mfh "\n\<$tag"; - foreach (split(/\,/, + $r->print(''); + my %lt=&fieldnames(); + foreach ('author','title','subject','keywords','abstract','notes', + 'copyright','customdistributionfile','language', + 'standards', + 'lowestgradelevel','highestgradelevel', + 'obsolete','obsoletereplacement') { + if (defined($ENV{'form.new_'.$_})) { + $Apache::lonpublisher::metadatafields{$_}= + $ENV{'form.new_'.$_}; + } + if (! $Apache::lonpublisher::metadatafields{'copyright'}) { + $Apache::lonpublisher::metadatafields{'copyright'}= + 'default'; + } + $r->print('

'.$lt{$_}.': '. + &prettyinput + ($_,$Apache::lonpublisher::metadatafields{$_}, + 'new_'.$_,'defaultmeta').'

'); + } + if ($ENV{'form.store'}) { + my $mfh; + if (! ($mfh=Apache::File->new('>'.$fn))) { + $r->print('

'. + &mt('Could not write metadata').', '. + &mt('FAIL').''); + } else { + foreach (sort keys %Apache::lonpublisher::metadatafields) { + next if ($_ =~ /\./); + my $unikey=$_; + $unikey=~/^([A-Za-z]+)/; + my $tag=$1; + $tag=~tr/A-Z/a-z/; + print $mfh "\n\<$tag"; + foreach (split(/\,/, $Apache::lonpublisher::metadatakeys{$unikey}) - ) { - my $value= - $Apache::lonpublisher::metadatafields{$unikey.'.'.$_}; - $value=~s/\"/\'\'/g; - print $mfh ' '.$_.'="'.$value.'"'; - } - print $mfh '>'. - &HTML::Entities::encode($Apache::lonpublisher::metadatafields{$unikey},'<>&"'). - ''; - } + ) { + my $value= + $Apache::lonpublisher::metadatafields{$unikey.'.'.$_}; + $value=~s/\"/\'\'/g; + print $mfh ' '.$_.'="'.$value.'"'; } - $r->print('

'.&mt('Wrote Metadata')); + print $mfh '>'. + &HTML::Entities::encode + ($Apache::lonpublisher::metadatafields{$unikey}, + '<>&"'). + ''; } + $r->print('

'.&mt('Wrote Metadata')); } - $r->print('

'. - ''); } + $r->print('
'); } - return OK; -} - -# BEGIN Block -BEGIN { - # Get columns of MySQL metadata table - @columns=&Apache::lonmysql::col_order('metadata'); + $r->print(''); + return; } 1;