--- loncom/interface/lonmeta.pm 2004/04/14 16:14:29 1.67 +++ loncom/interface/lonmeta.pm 2005/12/19 21:17:25 1.144 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Metadata display handler # -# $Id: lonmeta.pm,v 1.67 2004/04/14 16:14:29 matthew Exp $ +# $Id: lonmeta.pm,v 1.144 2005/12/19 21:17:25 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -17,7 +17,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License +# You should have received a copy of the GNU General Public License # along with LON-CAPA; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # @@ -31,9 +31,9 @@ package Apache::lonmeta; use strict; use LONCAPA::lonmetadata(); use Apache::Constants qw(:common); -use Apache::lonnet(); +use Apache::lonnet; use Apache::loncommon(); -use Apache::lonhtmlcommon(); +use Apache::lonhtmlcommon(); use Apache::lonmsg; use Apache::lonpublisher; use Apache::lonlocal; @@ -41,6 +41,87 @@ use Apache::lonmysql; use Apache::lonmsg; +############################################################ +############################################################ +## +## &get_dynamic_metadata_from_sql($url) +## +## Queries sql database for dynamic metdata +## Returns a hash of hashes, with keys of urls which match $url +## Returned fields are given below. +## +## Examples: +## +## %DynamicMetadata = &Apache::lonmeta::get_dynmaic_metadata_from_sql +## ('/res/msu/korte/'); +## +## $DynamicMetadata{'/res/msu/korte/example.problem'}->{$field} +## +############################################################ +############################################################ +sub get_dynamic_metadata_from_sql { + my ($url) = shift(); + my ($authordom,$author)=($url=~m:^/res/(\w+)/(\w+)/:); + if (! defined($authordom)) { + $authordom = shift(); + } + if (! defined($author)) { + $author = shift(); + } + if (! defined($authordom) || ! defined($author)) { + return (); + } + my @Fields = ('url','count','course', + 'goto','goto_list', + 'comefrom','comefrom_list', + 'sequsage','sequsage_list', + 'stdno','stdno_list', + 'dependencies', + 'avetries','avetries_list', + 'difficulty','difficulty_list', + 'disc','disc_list', + 'clear','technical','correct', + 'helpful','depth'); + # + my $query = 'SELECT '.join(',',@Fields). + ' FROM metadata WHERE url LIKE "'.$url.'%"'; + my $server = &Apache::lonnet::homeserver($author,$authordom); + my $reply = &Apache::lonnet::metadata_query($query,undef,undef, + ,[$server]); + return () if (! defined($reply) || ref($reply) ne 'HASH'); + my $filename = $reply->{$server}; + if (! defined($filename) || $filename =~ /^error/) { + return (); + } + my $max_time = time + 10; # wait 10 seconds for results at most + my %ReturnHash; + # + # Look for results + my $finished = 0; + while (! $finished && time < $max_time) { + my $datafile=$Apache::lonnet::perlvar{'lonDaemons'}.'/tmp/'.$filename; + if (! -e "$datafile.end") { next; } + my $fh; + if (!($fh=Apache::File->new($datafile))) { next; } + while (my $result = <$fh>) { + chomp($result); + next if (! $result); + my @Data = + map { + &Apache::lonnet::unescape($_); + } split(',',$result); + my $url = $Data[0]; + for (my $i=0;$i<=$#Fields;$i++) { + $ReturnHash{$url}->{$Fields[$i]}=$Data[$i]; + } + } + $finished = 1; + } + # + return %ReturnHash; +} + + # Fetch and evaluate dynamic metadata sub dynamicmeta { my $url=&Apache::lonnet::declutter(shift); @@ -114,21 +195,21 @@ sub evalgraph { return ''; } my $val=int($value*10.+0.5)-10; - my $output='
  | '; + $output.='  | '; } else { - $output.=''. - ' | '; + $output.=' | '. + ' | '; } $output.=' | '; if ($val>20) { - $output.=' | '. - ' | '; + $output.=' | '. + ' | '; } else { - $output.=' |   | '; + $output.='  | '; } - $output.='('.$value.') |
'; + $output.=' | '; } else { - $output.=' | '; + $output.=' | '; } } - $output.=' | ('.$value.') |
'. &mt('This resource has been marked obsolete by the author(s)'). '
'; @@ -507,6 +792,10 @@ sub present_uneditable_metadata { # my %lt=&fieldnames(); my $table=''; + my $title = $content{'title'}; + if (! defined($title)) { + $title = 'Untitled Resource'; + } foreach ('title', 'author', 'subject', @@ -522,7 +811,9 @@ sub present_uneditable_metadata { 'lastrevisiondate', 'owner', 'copyright', - 'customdistributionfile', + 'customdistributionfile', + 'sourceavail', + 'sourcerights', 'obsolete', 'obsoletereplacement') { $table.='
+$disuri
$obsoletewarning
-$versiondisplay
-