--- loncom/interface/lonmeta.pm 2005/12/05 20:30:16 1.134 +++ loncom/interface/lonmeta.pm 2005/12/19 20:07:13 1.141 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Metadata display handler # -# $Id: lonmeta.pm,v 1.134 2005/12/05 20:30:16 banghart Exp $ +# $Id: lonmeta.pm,v 1.141 2005/12/19 20:07:13 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -290,9 +290,44 @@ sub fieldnames { return &Apache::lonlocal::texthash(%fields); } +sub portfolio_display_uri { + my ($uri)=@_; + $uri =~ s|.*/portfolio(/.*)$|$1|; + my ($res_uri,$meta_uri) = ($uri,$uri); + + if ($uri =~ /\.meta$/) { + $res_uri =~ s/\.meta//; + } else { + $meta_uri .= '.meta'; + } + return ($res_uri,$meta_uri); +} + +sub pre_select_course { + my ($r,$uri) = @_; + my $output; + my $fn=&Apache::lonnet::filelocation('',$uri); + my ($res_uri,$meta_uri) = &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('
'); + return; +} sub select_course { - my ($r)=@_; my %courses; + my $output; + my $selected; foreach my $key (keys (%env)) { if ($key =~ m/\.metadata\./) { $key =~ m/^course\.(.+)(\.metadata.+$)/; @@ -302,30 +337,28 @@ sub select_course { $courses{$coursekey} = $value; } } - $r->print('

Course Related Meta-Data


'); - $r->print('
'); - $r->print('Select course restrictions
'); - $r->print(''; + $output .= ''; foreach my $key (keys (%courses)) { - if ($meta_not_found) { - undef($meta_not_found); - $r->print('

Portfolio Meta-Data


'); - $r->print(''); - $r->print('Select your course
'); - $r->print('
'); - $r->print(''); - $r->print('
'); + if ($Apache::lonpublisher::metadatafields{'courserestricted'} eq $1) { + $selected = ' SELECTED '; + } else { + $selected = ''; + } + $output .= ''; } - return 'ok'; + $output .= '
'; + return ($output); } # Pretty printing of metadata field @@ -516,7 +549,8 @@ sub prettyinput { $cur_values_stu = $value; } if ($type eq 'courserestricted') { - return (''); + return (&select_course()); + # return (''); } if (($type eq 'keywords') || ($type eq 'subject') || ($type eq 'author')||($type eq 'notes') @@ -603,6 +637,11 @@ sub prettyinput { ",'rights')\">".&mt('Select').''. &relatedfield(0,$relatedsearchflag,$relatedsep); } + if ($type eq 'courserestricted') { + return (&select_course()); + #return (''); + } + # Dates if (($type eq 'creationdate') || ($type eq 'lastrevisiondate')) { @@ -644,12 +683,15 @@ sub handler { # Looking for all bombs? &report_bombs($r,$uri); } elsif ($uri=~/\/portfolio\//) { - ($resdomain,$resuser)= + ($resdomain,$resuser)= (&Apache::lonnet::declutter($uri)=~m|^(\w+)/(\w+)/portfolio|); $r->print(&Apache::loncommon::bodytag ('Edit Portfolio File Information','','','',$resdomain)); - &present_editable_metadata($r,$uri,'portfolio'); - &select_course($r); + if ($env{'form.store'}) { + &present_editable_metadata($r,$uri,'portfolio'); + } else { + &pre_select_course($r,$uri); + } } elsif ($uri=~/^\/\~/) { # Construction space $r->print(&Apache::loncommon::bodytag @@ -1001,7 +1043,10 @@ sub present_editable_metadata { my $fn=&Apache::lonnet::filelocation('',$uri); $disuri=~s/^\/\~/\/priv\//; $disuri=~s/\.meta$//; - $disuri=~s|^/editupload||; + my $meta_uri = $disuri; + if ($disuri =~ m|/portfolio/|) { + ($disuri, $meta_uri) = &portfolio_display_uri($disuri); + } my $target=$uri; $target=~s/^\/\~/\/res\/$env{'request.role.domain'}\//; $target=~s/\.meta$//; @@ -1055,7 +1100,7 @@ ENDDEL %Apache::lonpublisher::metadatakeys=(); my $result=&Apache::lonnet::getfile($fn); if ($result == -1){ - $r->print('Creating new '.$disuri); + $r->print(&mt('Creating new file [_1]'),$meta_uri); } else { &Apache::lonpublisher::metaeval($result); } @@ -1071,7 +1116,7 @@ ENDEDIT my @fields; if ($file_type eq 'portfolio') { @fields = ('author','title','subject','keywords','abstract','notes','lowestgradelevel', - 'highestgradelevel','standards','courserestricted'); + 'highestgradelevel','standards'); } else { @fields = ('author','title','subject','keywords','abstract','notes', 'copyright','customdistributionfile','language', @@ -1079,25 +1124,23 @@ ENDEDIT 'lowestgradelevel','highestgradelevel','sourceavail','sourcerights', 'obsolete','obsoletereplacement'); } - my $metacourse; - if ($env{'form.metacourse'} ) { - $Apache::lonpublisher::metadatafields{'courserestricted'} = $env{'form.metacourse'}; - $metacourse = $env{'form.metacourse'}; - } else { - if (! $Apache::lonpublisher::metadatafields{'courserestricted'}) { - $Apache::lonpublisher::metadatafields{'courserestricted'}= - 'none'; - $metacourse = 'none'; - } else { - $metacourse = $Apache::lonpublisher::metadatafields{'courserestricted'}; - } - } + if ((! $Apache::lonpublisher::metadatafields{'courserestricted'}) && + (! $env{'form.new_courserestricted'})) { + $Apache::lonpublisher::metadatafields{'courserestricted'}= + 'none'; + } elsif ($env{'form.new_courserestricted'}) { + $Apache::lonpublisher::metadatafields{'courserestricted'}= + $env{'form.new_courserestricted'}; + } if (! $Apache::lonpublisher::metadatafields{'copyright'}) { $Apache::lonpublisher::metadatafields{'copyright'}= 'default'; } - if ($metacourse ne 'none') { - $r->print('Document metadata restricted by : '.$env{$metacourse.".description"}."
"); + if ($Apache::lonpublisher::metadatafields{'courserestricted'} ne 'none') { + $r->print(&mt('Associated with course [_1]',''.$env{$Apache::lonpublisher::metadatafields{'courserestricted'}.".description"}. + '').'
'); + } else { + $r->print("This resource is not associated with a course.
"); } foreach my $field_name(@fields) { @@ -1105,33 +1148,33 @@ ENDEDIT $Apache::lonpublisher::metadatafields{$field_name}= join(',',&Apache::loncommon::get_env_multiple('form.new_'.$field_name)); } - if ($metacourse ne 'none') { + if ($Apache::lonpublisher::metadatafields{'courserestricted'} ne 'none') { # handle restrictions here - if ($env{$metacourse.'.metadata.'.$field_name.'.options'} =~ m/active/){ + if (($env{$Apache::lonpublisher::metadatafields{'courserestricted'}.'.metadata.'.$field_name.'.options'} =~ m/active/) || + ($field_name eq 'courserestricted')){ $output.=('

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

'); - } elsif ($field_name eq 'courserestricted') { - $output.=( - &prettyinput($field_name, - $Apache::lonpublisher::metadatafields{$field_name}, - 'new_'.$field_name,'defaultmeta',undef,undef,undef,undef,$metacourse)); + 'new_'.$field_name,'defaultmeta', + undef,undef,undef,undef, + $Apache::lonpublisher::metadatafields{'courserestricted'}).'

'); } } else { - if ($field_name ne 'courserestricted') { + $output.=('

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

'); - } else { - $output.=&prettyinput($field_name, - $Apache::lonpublisher::metadatafields{$field_name}, - 'new_'.$field_name,'defaultmeta'); - } + } } - if ($env{'form.store'}) { + + $r->print($output.'
'); + + } + $r->print(''); + if ($env{'form.store'}) { my $mfh; my $formname='store'; my $file_content; @@ -1152,7 +1195,7 @@ ENDEDIT $Apache::lonpublisher::metadatakeys{$unikey}) ) { my $value= - $Apache::lonpublisher::metadatafields{$unikey.'.'.$_}; + $Apache::lonpublisher::metadatafields{$unikey.'.'.$_}; $value=~s/\"/\'\'/g; $file_content.=' '.$_.'="'.$value.'"' ; # print $mfh ' '.$_.'="'.$value.'"'; @@ -1166,7 +1209,7 @@ ENDEDIT if ($fn =~ /\/portfolio\//) { $fn =~ /\/portfolio\/(.*)$/; my $new_fn = '/'.$1; - $env{'form.'.$formname}=$file_content; + $env{'form.'.$formname}=$file_content."\n"; $env{'form.'.$formname.'.filename'}=$new_fn; &Apache::lonnet::userfileupload('uploaddoc','', 'portfolio'.$env{'form.currentpath'}); @@ -1192,10 +1235,6 @@ ENDEDIT } } } - $r->print($output.'
'); - } - $r->print(''); return; }