--- loncom/interface/lonmeta.pm 2007/01/15 20:51:52 1.197
+++ loncom/interface/lonmeta.pm 2008/12/10 18:43:32 1.218
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Metadata display handler
#
-# $Id: lonmeta.pm,v 1.197 2007/01/15 20:51:52 banghart Exp $
+# $Id: lonmeta.pm,v 1.218 2008/12/10 18:43:32 bisitz Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -42,24 +42,6 @@ use Apache::lonmsg;
use LONCAPA qw(:DEFAULT :match);
-############################################################
-############################################################
-##
-## &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/($match_domain)/($match_username)/});
@@ -265,7 +247,7 @@ sub fieldnames {
'correct' => 'Material appears to be correct',
'technical' => 'Resource is technically correct',
'avetries' => 'Average number of tries till solved',
- 'stdno' => 'Total number of students who have worked on this problem',
+ 'stdno' => 'Statistics calculated for number of students',
'difficulty' => 'Degree of difficulty',
'disc' => 'Degree of discrimination',
'dependencies' => 'Resources used by this resource',
@@ -383,7 +365,40 @@ sub select_course {
$Apache::lonpublisher::metadatafields{'courserestricted'};
my $selected = ($current_restriction eq 'none' ? 'selected="selected"'
: '');
-
+ if ($current_restriction =~ /^course\.($match_domain\_$match_courseid)$/) {
+ my $assoc_crs = $1;
+ my $added_metadata_fields = &Apache::lonparmset::get_added_meta_fieldnames($assoc_crs);
+ if (ref($added_metadata_fields) eq 'HASH') {
+ if (keys(%{$added_metadata_fields}) > 0) {
+ my $transfernotes;
+ foreach my $field_name (keys(%{$added_metadata_fields})) {
+ my $value = $Apache::lonpublisher::metadatafields{$field_name};
+ if ($value) {
+ $transfernotes .=
+ &Apache::loncommon::start_data_table_row().
+ '
'.
+ $field_name.' '.$value.' '.
+ &Apache::loncommon::end_data_table_row();
+ }
+ }
+ if ($transfernotes ne '') {
+ my %courseinfo = &Apache::lonnet::coursedescription($assoc_crs,{'one_time' => 1});
+ my $assoc_crs_description = $courseinfo{'description'};
+ $output .= &mt('This resource is currently associated with a course ([_1]) which includes added metadata fields specific to the course.',$assoc_crs_description).' '."\n".
+ &mt('You can choose to transfer data from the added fields to the "Notes" field if you are planning to change the course association.').' '.
+ &Apache::loncommon::start_data_table().
+ &Apache::loncommon::start_data_table_header_row().
+ 'Copy to notes? '."\n".
+ 'Field name '."\n".
+ 'Values '."\n".
+ &Apache::loncommon::end_data_table_header_row().
+ $transfernotes.
+ &Apache::loncommon::end_data_table().' ';
+ }
+ }
+ }
+ }
$output .= '';
$output .= ''.
&mt('None').' '.$/;
@@ -598,12 +613,15 @@ sub prettyinput {
if ($meta_options{$item}) {
push(@cur_values_inst,$item);
} else {
- $cur_values_stu .= $item.',';
+ if ($item ne '') {
+ $cur_values_stu .= $item.',';
+ }
}
}
+ $cur_values_stu =~ s/,$//;
my @key_order = sort(keys(%meta_options));
- unshift (@key_order,'Not Specified');
- $meta_options{'Not Specified'} = 'Not Specified';
+ unshift(@key_order,'');
+ $meta_options{''} = 'Not specified';
$meta_options{'select_form_order'} = \@key_order;
} else {
$cur_values_stu = $value;
@@ -612,11 +630,10 @@ sub prettyinput {
return (&select_course());
# return (' ');
}
- my $course = $env{'request.course.id'};
if (($type eq 'keywords') || ($type eq 'subject')
|| ($type eq 'author')||($type eq 'notes')
|| ($type eq 'abstract')|| ($type eq 'title')|| ($type eq 'standards')
- || (exists($env{'course.'.$env{'request.course.id'}.'.metadata.'.$type.'.added'}))) {
+ || (exists($env{$course_key.'.metadata.'.$type.'.added'}))) {
if ($values) {
if ($only_one) {
@@ -769,12 +786,14 @@ sub handler {
&present_editable_metadata($r,$uri,'groups');
} elsif ($uri=~m|^/~|) {
# Construction space
- $r->print(&Apache::loncommon::start_page('Edit Catalog nformation',
- undef,
+ $r->print(&Apache::loncommon::start_page('Edit Catalog Information',
+ "\n".'',
{'domain' => $resdomain,}));
&present_editable_metadata($r,$uri);
} else {
- $r->print(&Apache::loncommon::start_page('Catalog Information',
+ $r->print(&Apache::loncommon::start_page('Metadata',
undef,
{'domain' => $resdomain,}));
&present_uneditable_metadata($r,$uri);
@@ -802,10 +821,14 @@ sub report_bombs {
&Apache::lonmsg::clear_author_res_msg($uri);
}
my $clear=&mt('Clear all Messages in Subdirectory');
- $r->print(<print(<
-
+$cancel
+
ENDCLEAR
my %brokenurls =
&Apache::lonmsg::all_url_author_res_msg($author,$domain);
@@ -865,9 +888,9 @@ sub present_uneditable_metadata {
my $obsolete=$content{'obsolete'};
my $obsoletewarning='';
if (($obsolete) && ($env{'user.adv'})) {
- $obsoletewarning=''.
+ $obsoletewarning=''.
&mt('This resource has been marked obsolete by the author(s)').
- '
';
+ '';
}
#
my %lt=&fieldnames();
@@ -904,23 +927,22 @@ sub present_uneditable_metadata {
'obsoletereplacement');
}
foreach my $field (@fields) {
- $table.=''.$lt{$field}.
- ' '.
- &prettyprint($field,$content{$field}).' ';
+ $table.=&Apache::lonhtmlcommon::row_title($lt{$field})
+ .&prettyprint($field,$content{$field})
+ .&Apache::lonhtmlcommon::row_closure();
delete($content{$field});
}
#
- $r->print(<$title
-
-$disuri
-$obsoletewarning
-$versiondisplay
-
-
-ENDHEAD
+ $r->print("$title "
+ .''
+ .$disuri.' '
+ .$obsoletewarning
+ .$versiondisplay
+ .'
'
+ .&Apache::lonhtmlcommon::start_pick_box()
+ .$table
+ .&Apache::lonhtmlcommon::end_pick_box()
+ );
if (!$uploaded && $env{'user.adv'}) {
&print_dynamic_metadata($r,$uri,\%content);
}
@@ -947,17 +969,18 @@ sub print_dynamic_metadata {
exists($dynmeta{'goto'}) ||
exists($dynmeta{'course'})) {
$r->print(''.&mt('Access and Usage Statistics').' '.
- '');
+ &Apache::lonhtmlcommon::start_pick_box());
foreach ('count',
'sequsage','sequsage_list',
'comefrom','comefrom_list',
'goto','goto_list',
'course','course_list') {
- $r->print(''.$lt{$_}.' '.
- ''.
- &prettyprint($_,$dynmeta{$_})." \n");
+ $r->print(&Apache::lonhtmlcommon::row_title($lt{$_})
+ .&prettyprint($_,$dynmeta{$_})
+ .&Apache::lonhtmlcommon::row_closure()
+ );
}
- $r->print('
');
+ $r->print(&Apache::lonhtmlcommon::end_pick_box());
} else {
$r->print(''.&mt('No Access or Usages Statistics are available for this resource.').' ');
}
@@ -972,35 +995,35 @@ sub print_dynamic_metadata {
$r->print(''.
&mt('Overall Assessment Statistical Data').
' '.
- '');
- $r->print(''.$lt{'stdno'}.' '.
- ''.
- &prettyprint('stdno',$dynmeta{'stdno'}).
- ' '." \n");
+ &Apache::lonhtmlcommon::start_pick_box());
+ $r->print(&Apache::lonhtmlcommon::row_title($lt{'stdno'})
+ .&prettyprint('stdno',$dynmeta{'stdno'})
+ .&Apache::lonhtmlcommon::row_closure()
+ );
foreach ('avetries','difficulty','disc') {
- $r->print(''.$lt{$_}.' '.
- ''.
- &prettyprint($_,sprintf('%5.2f',$dynmeta{$_})).
- ' '." \n");
+ $r->print(&Apache::lonhtmlcommon::row_title($lt{$_})
+ .&prettyprint($_,sprintf('%5.2f',$dynmeta{$_}))
+ .&Apache::lonhtmlcommon::row_closure()
+ );
}
- $r->print('
');
+ $r->print(&Apache::lonhtmlcommon::end_pick_box());
}
if (exists($dynmeta{'stats'})) {
#
# New assessment statistics
$r->print(''.
- &mt('Detailed Assessment Statistical Data').
+ &mt('Recent Detailed Assessment Statistical Data').
' ');
- my $table = ''.
- ''.
- 'Course '.
- 'Section(s) '.
- 'Num Students '.
- 'Mean Tries '.
- 'Degree of Difficulty '.
- 'Degree of Discrimination '.
- 'Time of computation '.
- ' '.$/;
+ my $table=&Apache::loncommon::start_data_table()
+ .&Apache::loncommon::start_data_table_header_row()
+ .''.&mt('Course').' '
+ .''.&mt('Section(s)').' '
+ .''.&mt('Num Students').' '
+ .''.&mt('Mean Tries').' '
+ .''.&mt('Degree of Difficulty').' '
+ .''.&mt('Degree of Discrimination').' '
+ .''.&mt('Time of computation').' '
+ .&Apache::loncommon::end_data_table_header_row().$/;
foreach my $identifier (sort(keys(%{$dynmeta{'stats'}}))) {
my $data = $dynmeta{'stats'}->{$identifier};
my $course = $data->{'course'};
@@ -1011,9 +1034,9 @@ sub print_dynamic_metadata {
&Apache::lonnet::logthis('lookup for '.$course.' failed');
next;
}
- $table .= '';
+ $table .= &Apache::loncommon::start_data_table_row();
$table .=
- ''.$courseinfo{'description'}.' ';
+ ''.$courseinfo{'description'}.' ';
$table .=
''.$data->{'sections'}.' ';
$table .=
@@ -1028,16 +1051,15 @@ sub print_dynamic_metadata {
$table .= '';
}
$table .=
- ''.
+ ''.
&Apache::lonlocal::locallocaltime($data->{'timestamp'}).
- ' ';
- $table .=
- ' '.$/;
+ '';
+ $table .= &Apache::loncommon::end_data_table_row().$/;
}
- $table .= '
'.$/;
+ $table .= &Apache::loncommon::end_data_table().$/;
$r->print($table);
} else {
- $r->print('No new dynamic data found.');
+ $r->print(&mt('No new dynamic data found.'));
}
} else {
$r->print(''.
@@ -1053,13 +1075,14 @@ sub print_dynamic_metadata {
exists($dynmeta{'correct'}) ||
exists($dynmeta{'technical'})){
$r->print(''.&mt('Evaluation Data').' '.
- ' ');
+ &Apache::lonhtmlcommon::start_pick_box());
foreach ('clear','depth','helpful','correct','technical') {
- $r->print(''.$lt{$_}.' '.
- ''.
- &prettyprint($_,$dynmeta{$_})." \n");
+ $r->print(&Apache::lonhtmlcommon::row_title($lt{$_})
+ .&prettyprint($_,$dynmeta{$_})
+ .&Apache::lonhtmlcommon::row_closure()
+ );
}
- $r->print('
');
+ $r->print(&Apache::lonhtmlcommon::end_pick_box());
} else {
$r->print(''.&mt('No Evaluation Data is available for this resource.').' ');
}
@@ -1087,7 +1110,8 @@ sub print_dynamic_metadata {
# All other stuff
$r->print(''.
&mt('Additional Metadata (non-standard, parameters, exports)').
- ' ');
+ '');
+ $r->print(&Apache::lonhtmlcommon::start_pick_box());
foreach (sort(keys(%content))) {
my $name=$_;
if ($name!~/\.display$/) {
@@ -1105,14 +1129,16 @@ sub print_dynamic_metadata {
$name.'.'.$_).'; ';
}
}
- $r->print(''.$display.' '.$content{$name});
+ $r->print(&Apache::lonhtmlcommon::row_title($display)
+ .$content{$name}
+ );
if ($otherinfo) {
$r->print(' ('.$otherinfo.')');
}
- $r->print(" \n");
+ $r->print(&Apache::lonhtmlcommon::row_closure());
}
}
- $r->print("
");
+ $r->print(&Apache::lonhtmlcommon::end_pick_box());
return;
}
@@ -1175,17 +1201,20 @@ ENDBOMBS
ENDDEL
} else {
- $r->print(' '.$goback.'');
+ $r->print(''.$goback.'
');
+ if ($env{'form.clearmsg'}) {
+ my ($diruri) = ($disuri =~ m{(.*/)[^/]*});
+ $r->print(''.
+ &mt('Back To Directory').'
');
+ }
}
$r->print(' '.$bombs);
} else {
- my $displayfile='Catalog Information for '.$disuri;
+ my $displayfile=&mt('Metadata for [_1]',$disuri);
if ($disuri=~/\/default$/) {
my $dir=$disuri;
$dir=~s/default$//;
- $displayfile=
- &mt('Default Cataloging Information for Directory').' '.
- $dir;
+ $displayfile=&mt('Default Metadata for Directory [_1]',$dir);
}
%Apache::lonpublisher::metadatafields=();
%Apache::lonpublisher::metadatakeys=();
@@ -1195,13 +1224,26 @@ ENDDEL
} else {
&Apache::lonpublisher::metaeval($result);
}
+ if ($env{'form.new_courserestricted'}) {
+ my $new_assoc_course = $env{'form.new_courserestricted'};
+ my $prev_courserestricted = $Apache::lonpublisher::metadatafields{'courserestricted'};
+ if (($prev_courserestricted) &&
+ ($prev_courserestricted ne $new_assoc_course)) {
+ my $transfers = [];
+ foreach my $key (keys(%env)) {
+ if ($key =~ /^form\.transfer_(.+)$/) {
+ push(@{$transfers},$1);
+ }
+ }
+ if (@{$transfers} > 0) {
+ &store_transferred_addedfields($fn,$uri,$transfers);
+ }
+ }
+ }
$r->print(<$displayfile