--- loncom/interface/lonmeta.pm 2005/10/14 04:24:12 1.111 +++ loncom/interface/lonmeta.pm 2006/09/25 19:24:49 1.178 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Metadata display handler # -# $Id: lonmeta.pm,v 1.111 2005/10/14 04:24:12 banghart Exp $ +# $Id: lonmeta.pm,v 1.178 2006/09/25 19:24:49 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -39,6 +39,8 @@ use Apache::lonpublisher; use Apache::lonlocal; use Apache::lonmysql; use Apache::lonmsg; +use lib '/home/httpd/lib/perl/'; +use LONCAPA; ############################################################ @@ -71,20 +73,7 @@ sub get_dynamic_metadata_from_sql { 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 $query = 'SELECT * FROM metadata WHERE url LIKE "'.$url.'%"'; my $server = &Apache::lonnet::homeserver($author,$authordom); my $reply = &Apache::lonnet::metadata_query($query,undef,undef, ,[$server]); @@ -106,13 +95,9 @@ sub get_dynamic_metadata_from_sql { 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]; + my %hash=&LONCAPA::lonmetadata::metadata_col_to_hash(map { &unescape($_) } split(/\,/,$result)); + foreach my $key (keys(%hash)) { + $ReturnHash{$hash{'url'}}->{$key}=$hash{$key}; } } $finished = 1; @@ -185,7 +170,7 @@ sub authordisplay { my ($aname,$adom)=@_; return &Apache::loncommon::aboutmewrapper (&Apache::loncommon::plainname($aname,$adom), - $aname,$adom,'preview').' ['.$aname.'@'.$adom.']'; + $aname,$adom,'preview').' ['.$aname.':'.$adom.']'; } # Pretty display @@ -243,16 +228,17 @@ sub fieldnames { 'authorspace' => 'Author Space', 'modifyinguser' => 'Last Modifying User', 'subject' => 'Subject', + 'standards' => 'Standards', 'keywords' => 'Keyword(s)', 'notes' => 'Notes', 'abstract' => 'Abstract', 'lowestgradelevel' => 'Lowest Grade Level', 'highestgradelevel' => 'Highest Grade Level'); + if (! defined($file_type) || $file_type ne 'portfolio') { %fields = (%fields, 'domain' => 'Domain', - 'standards' => 'Standards', 'mime' => 'MIME Type', 'language' => 'Language', 'creationdate' => 'Creation Date', @@ -282,55 +268,144 @@ sub fieldnames { 'stdno' => 'Total number of students who have worked on this problem', 'difficulty' => 'Degree of difficulty', 'disc' => 'Degree of discrimination', - 'dependencies' => 'Resources used by this resource', + 'dependencies' => 'Resources used by this resource', ); } return &Apache::lonlocal::texthash(%fields); } -sub select_course { - my ($r)=@_; - my @courses; - foreach my $key (keys (%env)) { - - if ($key =~ m/^(course\..+)\.metadata\..+\.options/) { - my $course_key = $1; - $course_key .= '.description'; - $r->print($env{$course_key}.' of '.$course_key.'
'); - push @courses, $key; - } - } - foreach (@courses) { - $r->print($_.' was found
'); - } - $r->print('

Portfolio Meta-Data


'); - $r->print('
'); - $r->print('Select your test course
'); - $r->print(''); - } - my $course_key = $key; - $course_key =~ s/\.metadata\..*//; - $r->print(''); - } +sub portfolio_linked_path { + my ($path,$group,$port_path) = @_; + + my $start = 'portfolio'; + if ($group) { + $start = "groups/$group/".$start; + } + my %anchor_fields = ( + 'selectfile' => $start, + 'currentpath' => '/' + ); + my $result = &Apache::portfolio::make_anchor($port_path,\%anchor_fields,$start); + my $fullpath = '/'; + my (undef,@tree) = split('/',$path); + my $filename = pop(@tree); + foreach my $dir (@tree) { + $fullpath .= $dir.'/'; + $result .= '/'; + my %anchor_fields = ( + 'selectfile' => $dir, + 'currentpath' => $fullpath + ); + $result .= &Apache::portfolio::make_anchor($port_path,\%anchor_fields,$dir); + } + $result .= "/$filename"; + return $result; +} + +sub get_port_path_and_group { + my ($uri)=@_; + + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + + my ($port_path,$group); + if ($uri =~ m{^/editupload/\Q$cdom\E/\Q$cnum\E/groups/}) { + $group = (split('/',$uri))[5]; + $port_path = '/adm/coursegrp_portfolio'; + } else { + $port_path = '/adm/portfolio'; + } + if ($env{'form.group'} ne $group) { + $env{'form.group'} = $group; + } + return ($port_path,$group); +} + +sub portfolio_display_uri { + my ($uri,$as_links)=@_; + + my ($port_path,$group) = &get_port_path_and_group($uri); + + $uri =~ s|.*/(portfolio/.*)$|$1|; + my ($res_uri,$meta_uri) = ($uri,$uri); + if ($uri =~ /\.meta$/) { + $res_uri =~ s/\.meta//; + } else { + $meta_uri .= '.meta'; } - unless ($meta_not_found) { - $r->print('
'); - $r->print(''); - $r->print('
'); + + my ($path) = ($res_uri =~ m|^portfolio(.*/)[^/]*$|); + if ($as_links) { + $res_uri = &portfolio_linked_path($res_uri,$group,$port_path); + $meta_uri = &portfolio_linked_path($meta_uri,$group,$port_path); } - return 'ok'; + return ($res_uri,$meta_uri,$path); +} + +sub pre_select_course { + my ($r,$uri) = @_; + my $output; + my $fn=&Apache::lonnet::filelocation('',$uri); + my ($res_uri,$meta_uri,$path) = &portfolio_display_uri($uri); + %Apache::lonpublisher::metadatafields=(); + %Apache::lonpublisher::metadatakeys=(); + my $result=&Apache::lonnet::getfile($fn); + if ($result == -1){ + $r->print(&mt('Creating new file [_1]'),$meta_uri); + } else { + &Apache::lonpublisher::metaeval($result); + } + $r->print('
'); + $r->print('

'.&mt('If you would like to associate this resource ([_1]) with a current or previous course, please select one from the list below, otherwise select, \'None\'',''.$res_uri.'').'

'); + $output = &select_course(); + $r->print($output.'
'); + $r->print(''); + $r->print(''); + $r->print('
'); + + my ($port_path,$group) = &get_port_path_and_group($uri); + my $group_input; + if ($group) { + $group_input = ''; + } + $r->print('

'. + ''. + $group_input. + ''. + '
'); + + return; +} +sub select_course { + my $output=$/; + my $current_restriction= + $Apache::lonpublisher::metadatafields{'courserestricted'}; + my $selected = ($current_restriction eq 'none' ? 'selected="selected"' + : ''); + + $output .= '
'; + return ($output); } # Pretty printing of metadata field @@ -392,7 +467,7 @@ sub prettyprint { ($type eq 'comefrom_list') || ($type eq 'sequsage_list') || ($type eq 'dependencies')) { - return '