--- loncom/interface/lonmeta.pm 2008/12/10 18:43:32 1.218
+++ loncom/interface/lonmeta.pm 2013/06/04 23:12:08 1.251
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Metadata display handler
#
-# $Id: lonmeta.pm,v 1.218 2008/12/10 18:43:32 bisitz Exp $
+# $Id: lonmeta.pm,v 1.251 2013/06/04 23:12:08 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -164,7 +164,7 @@ sub evalgraph {
my $val=int($value*10.+0.5)-10;
my $output='
';
if ($val>=20) {
- $output.='  | ';
+ $output.=''.(' ' x2).' | ';
} else {
$output.=' | '.
' | ';
@@ -174,7 +174,7 @@ sub evalgraph {
$output.=' | '.
' | ';
} else {
- $output.='  | ';
+ $output.=''.(' ' x2).' | ';
}
$output.=' ('.sprintf("%5.2f",$value).') |
';
return $output;
@@ -338,7 +338,7 @@ sub pre_select_course {
&Apache::lonpublisher::metaeval($result);
}
$r->print('
-ENDCLEAR
+ if (!&Apache::lonnet::constructaccess('/priv/'.$domain.'/'.$author.'/')) {
+ $r->print(''.&mt('Not authorized').'
');
+ return;
+ }
+
+ my $showbuttons=1;
+ my $message='';
+ if ($env{'form.clearbombs'}) {
+ my $rc=&Apache::lonmsg::clear_author_res_msg($uri);
+ if ($rc eq 'ok') {
+ $message=&Apache::lonhtmlcommon::confirm_success(
+ &mt('Messages cleared.'));
+ $showbuttons=0;
+ } else {
+ $message=&Apache::lonhtmlcommon::confirm_success(
+ &mt('Error clearing messages'),1)
+ .'
'.&mt('Error: [_1]',$rc);
+ }
+ }
+
+ if ($message) {
+ $message=&Apache::loncommon::confirmwrapper($message);
+ $r->print($message);
+ }
+
+ my $cancelurl=$uri;
+ $cancelurl=~s/^\Q$domain\E/\/priv\/$domain/;
+
+ if ($showbuttons) {
+ $r->print(
+ '
'
+ );
+ # Display all bombs of subdirectory
my %brokenurls =
&Apache::lonmsg::all_url_author_res_msg($author,$domain);
- foreach (sort(keys(%brokenurls))) {
- if ($_=~/^\Q$uri\E/) {
+ foreach my $key (sort(keys(%brokenurls))) {
+ if ($key=~/^\Q$uri\E/) {
$r->print
- (''.$_.''.
- &Apache::lonmsg::retrieve_author_res_msg($_).
+ (''.$key.''.
+ &Apache::lonmsg::retrieve_author_res_msg($key).
'
');
}
}
} else {
- $r->print(&mt('Not authorized'));
+ my $functions=&Apache::lonhtmlcommon::start_funclist('Actions');
+ $functions.=&Apache::lonhtmlcommon::add_item_funclist(
+ ''.
+ &mt('Back to Source Directory').'');
+ $functions .= &Apache::lonhtmlcommon::end_funclist();
+ $r->print(''.$functions.'
');
}
return;
}
@@ -859,8 +950,8 @@ sub present_uneditable_metadata {
my $uploaded = ($uri =~ m|/uploaded/|);
my %content=();
# Read file
- foreach (split(/\,/,&Apache::lonnet::metadata($uri,'keys'))) {
- $content{$_}=&Apache::lonnet::metadata($uri,$_);
+ foreach my $key (split(/\,/,&Apache::lonnet::metadata($uri,'keys'))) {
+ $content{$key}=&Apache::lonnet::metadata($uri,$key);
}
# Render Output
# displayed url
@@ -878,12 +969,11 @@ sub present_uneditable_metadata {
$currentversion :
&mt('information not available')).')';
} else {
- $versiondisplay='Version: '.$currentversion;
+ $versiondisplay=&mt('Version: [_1]',$currentversion);
}
}
- # crumbify displayed URL uri target prefix form size
- $disuri=&Apache::lonhtmlcommon::crumbs($disuri,undef, undef, undef,'+1');
- $disuri =~ s:
::g;
+ # crumbify displayed URL uri target prefix form
+ $disuri=&Apache::lonhtmlcommon::crumbs($disuri,undef, undef, undef);
# obsolete
my $obsolete=$content{'obsolete'};
my $obsoletewarning='';
@@ -897,7 +987,7 @@ sub present_uneditable_metadata {
my $table='';
my $title = $content{'title'};
if (! defined($title)) {
- $title = 'Untitled Resource';
+ $title = &mt('Untitled Resource');
}
my @fields;
if ($uploaded) {
@@ -926,10 +1016,14 @@ sub present_uneditable_metadata {
'obsolete',
'obsoletereplacement');
}
+ my $rownum = 0;
foreach my $field (@fields) {
+ my $lastrow = '';
+ $rownum ++;
+ $lastrow = 1 if ($rownum == @fields);
$table.=&Apache::lonhtmlcommon::row_title($lt{$field})
.&prettyprint($field,$content{$field})
- .&Apache::lonhtmlcommon::row_closure();
+ .&Apache::lonhtmlcommon::row_closure($lastrow);
delete($content{$field});
}
#
@@ -963,30 +1057,36 @@ sub print_dynamic_metadata {
my %dynmeta=&dynamicmeta($uri);
#
# General Access and Usage Statistics
+ $r->print(''.&mt('Access and Usage Statistics').'
');
if (exists($dynmeta{'count'}) ||
exists($dynmeta{'sequsage'}) ||
exists($dynmeta{'comefrom'}) ||
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(&Apache::lonhtmlcommon::row_title($lt{$_})
- .&prettyprint($_,$dynmeta{$_})
- .&Apache::lonhtmlcommon::row_closure()
+ $r->print(&Apache::lonhtmlcommon::start_pick_box());
+ my @counts = ('count','sequsage','sequsage_list',
+ 'comefrom','comefrom_list','goto',
+ 'goto_list','course','course_list');
+ my $rownum = 0;
+ foreach my $item (@counts) {
+ my $lastrow = '';
+ $rownum ++;
+ $lastrow = 1 if ($rownum == @counts);
+ $r->print(&Apache::lonhtmlcommon::row_title($lt{$item})
+ .&prettyprint($item,$dynmeta{$item})
+ .&Apache::lonhtmlcommon::row_closure($lastrow)
);
}
$r->print(&Apache::lonhtmlcommon::end_pick_box());
} else {
- $r->print(''.&mt('No Access or Usages Statistics are available for this resource.').'
');
+ $r->print(''
+ .&mt('No Access or Usages Statistics are available for this resource.')
+ .'
'
+ );
}
#
# Assessment statistics
- if ($uri=~/\.(problem|exam|quiz|assess|survey|form)$/) {
+ if ($uri=~/$LONCAPA::assess_re/) {
if (exists($dynmeta{'stdno'}) ||
exists($dynmeta{'avetries'}) ||
exists($dynmeta{'difficulty'}) ||
@@ -1000,25 +1100,32 @@ sub print_dynamic_metadata {
.&prettyprint('stdno',$dynmeta{'stdno'})
.&Apache::lonhtmlcommon::row_closure()
);
- foreach ('avetries','difficulty','disc') {
- $r->print(&Apache::lonhtmlcommon::row_title($lt{$_})
- .&prettyprint($_,sprintf('%5.2f',$dynmeta{$_}))
- .&Apache::lonhtmlcommon::row_closure()
+ my @stats = ('avetries','difficulty','disc');
+ my $rownum = 0;
+ foreach my $item (@stats) {
+ my $lastrow = '';
+ $rownum ++;
+ $lastrow = 1 if ($rownum == @stats);
+ $r->print(&Apache::lonhtmlcommon::row_title($lt{$item})
+ .&prettyprint($item,sprintf('%5.2f',$dynmeta{$item}))
+ .&Apache::lonhtmlcommon::row_closure($lastrow)
);
}
$r->print(&Apache::lonhtmlcommon::end_pick_box());
}
+ #
+ # New assessment statistics
+ $r->print(''
+ .&mt('Recent Detailed Assessment Statistical Data')
+ .'
'
+ );
if (exists($dynmeta{'stats'})) {
- #
- # New assessment statistics
- $r->print(''.
- &mt('Recent Detailed Assessment Statistical Data').
- '
');
my $table=&Apache::loncommon::start_data_table()
.&Apache::loncommon::start_data_table_header_row()
.''.&mt('Course').' | '
.''.&mt('Section(s)').' | '
.''.&mt('Num Students').' | '
+ .''.&mt('Part').' | '
.''.&mt('Mean Tries').' | '
.''.&mt('Degree of Difficulty').' | '
.''.&mt('Degree of Discrimination').' | '
@@ -1041,10 +1148,12 @@ sub print_dynamic_metadata {
''.$data->{'sections'}.' | ';
$table .=
''.$data->{'stdno'}.' | ';
- foreach ('avetries','difficulty','disc') {
+ $table .=
+ ''.$data->{'part'}.' | ';
+ foreach my $item ('avetries','difficulty','disc') {
$table .= '';
- if (exists($data->{$_})) {
- $table .= sprintf('%.2f',$data->{$_}).' ';
+ if (exists($data->{$item})) {
+ $table .= sprintf('%.2f',$data->{$item}).' ';
} else {
$table .= '';
}
@@ -1059,52 +1168,72 @@ sub print_dynamic_metadata {
$table .= &Apache::loncommon::end_data_table().$/;
$r->print($table);
} else {
- $r->print(&mt('No new dynamic data found.'));
+ $r->print(' '
+ .&mt('No new dynamic data found.')
+ .' '
+ );
}
} else {
$r->print(''.
&mt('No Assessment Statistical Data is available for this resource').
'');
}
-
- #
#
+ # Evaluation Data
+ $r->print(''.&mt('Evaluation Data').'');
if (exists($dynmeta{'clear'}) ||
exists($dynmeta{'depth'}) ||
exists($dynmeta{'helpful'}) ||
exists($dynmeta{'correct'}) ||
exists($dynmeta{'technical'})){
- $r->print(''.&mt('Evaluation Data').''.
- &Apache::lonhtmlcommon::start_pick_box());
- foreach ('clear','depth','helpful','correct','technical') {
- $r->print(&Apache::lonhtmlcommon::row_title($lt{$_})
- .&prettyprint($_,$dynmeta{$_})
- .&Apache::lonhtmlcommon::row_closure()
+ $r->print(&Apache::lonhtmlcommon::start_pick_box());
+ my @criteria = ('clear','depth','helpful','correct','technical');
+ my $rownum = 0;
+ foreach my $item (@criteria) {
+ my $lastrow = '';
+ $rownum ++;
+ $lastrow = 1 if ($rownum == @criteria);
+ $r->print(&Apache::lonhtmlcommon::row_title($lt{$item})
+ .&prettyprint($item,$dynmeta{$item})
+ .&Apache::lonhtmlcommon::row_closure($lastrow)
);
}
$r->print(&Apache::lonhtmlcommon::end_pick_box());
} else {
- $r->print(''.&mt('No Evaluation Data is available for this resource.').'');
+ $r->print(''
+ .&mt('No Evaluation Data is available for this resource.')
+ .' '
+ );
}
+ # Evaluation Comments
$uri=~/^\/res\/($match_domain)\/($match_username)\//;
if ((($env{'user.domain'} eq $1) && ($env{'user.name'} eq $2))
|| ($env{'user.role.ca./'.$1.'/'.$2})) {
+ $r->print(''.&mt('Evaluation Comments').''
+ .'('
+ .&mt('visible to author and co-authors only')
+ .') '
+ );
if (exists($dynmeta{'comments'})) {
- $r->print(''.&mt('Evaluation Comments').' ('.
- &mt('visible to author and co-authors only').
- ')'.
- ''.$dynmeta{'comments'}.' ');
+ $r->print(''.$dynmeta{'comments'}.' ');
} else {
- $r->print(''.&mt('There are no Evaluation Comments on this resource.').'');
+ $r->print(''
+ .&mt('There are no Evaluation Comments on this resource.')
+ .' '
+ );
}
my $bombs = &Apache::lonmsg::retrieve_author_res_msg($uri);
if (defined($bombs) && $bombs ne '') {
- $r->print(''.&mt('Error Messages').' ('.
- &mt('visible to author and co-authors only').')'.
- ''.$bombs);
- } else {
- $r->print(''.&mt('There are currently no Error Messages for this resource.').'');
- }
+ $r->print(''
+ .''.&mt('Error Messages').''
+ .'('
+ .&mt('visible to author and co-authors only')
+ .') '
+ .$bombs
+ );
+ } #else {
+ # $r->print(''.&mt('There are currently no Error Messages for this resource.').'');
+ #}
}
#
# All other stuff
@@ -1112,21 +1241,31 @@ sub print_dynamic_metadata {
&mt('Additional Metadata (non-standard, parameters, exports)').
'');
$r->print(&Apache::lonhtmlcommon::start_pick_box());
- foreach (sort(keys(%content))) {
- my $name=$_;
- if ($name!~/\.display$/) {
+ my @names;
+ foreach my $key (sort(keys(%content))) {
+ if ($key!~/\.display$/) {
+ push(@names,$key);
+ }
+ }
+ if (@names > 0) {
+ my $rownum = 0;
+ foreach my $name (@names) {
+ my $lastrow = '';
+ $rownum ++;
+ $lastrow = 1 if ($rownum == @names);
+
my $display=&Apache::lonnet::metadata($uri,
$name.'.display');
if (! $display) {
$display=$name;
};
my $otherinfo='';
- foreach ('name','part','type','default') {
+ foreach my $item ('name','part','type','default') {
if (defined(&Apache::lonnet::metadata($uri,
- $name.'.'.$_))) {
- $otherinfo.=' '.$_.'='.
+ $name.'.'.$item))) {
+ $otherinfo.=' '.$item.'='.
&Apache::lonnet::metadata($uri,
- $name.'.'.$_).'; ';
+ $name.'.'.$item).'; ';
}
}
$r->print(&Apache::lonhtmlcommon::row_title($display)
@@ -1135,7 +1274,7 @@ sub print_dynamic_metadata {
if ($otherinfo) {
$r->print(' ('.$otherinfo.')');
}
- $r->print(&Apache::lonhtmlcommon::row_closure());
+ $r->print(&Apache::lonhtmlcommon::row_closure($lastrow));
}
}
$r->print(&Apache::lonhtmlcommon::end_pick_box());
@@ -1153,7 +1292,7 @@ sub print_dynamic_metadata {
#####################################################
sub present_editable_metadata {
my ($r,$uri,$file_type) = @_;
- # Construction Space Call
+ # Authoring Space Call
# Header
my $disuri=$uri;
my $fn=&Apache::lonnet::filelocation('',$uri);
@@ -1169,58 +1308,89 @@ sub present_editable_metadata {
$target=~s/\.meta$//;
my $bombs=&Apache::lonmsg::retrieve_author_res_msg($target);
if ($bombs) {
- my $showdel=1;
+ # Display Bombs, not Metadata
+ $r->print(
+ ''.&mt('Error Messages').''
+ .''.&mt('Folder: [_1]',
+ ''.$disuri.'')
+ .' '
+ );
+ my $showbuttons=1;
+ my $message='';
+ my $rc='';
if ($env{'form.delmsg'}) {
- if (&Apache::lonmsg::del_url_author_res_msg($target) eq 'ok') {
- $bombs=&mt('Messages deleted.');
- $showdel=0;
+ $rc=&Apache::lonmsg::del_url_author_res_msg($target);
+ if ($rc eq 'ok') {
+ $message=&Apache::lonhtmlcommon::confirm_success(
+ &mt('Messages deleted.'));
+ $showbuttons=0;
} else {
- $bombs=&mt('Error deleting messages');
+ $message=&Apache::lonhtmlcommon::confirm_success(
+ &mt('Error deleting messages'), 1)
+ .' '.&mt('Error: [_1]',$rc);
}
}
if ($env{'form.clearmsg'}) {
my $cleardir=$target;
- $cleardir=~s/\/[^\/]+$/\//;
- if (&Apache::lonmsg::clear_author_res_msg($cleardir) eq 'ok') {
- $bombs=&mt('Messages cleared.');
- $showdel=0;
+ $cleardir=~s/\/[^\/]+$/\//; # Extract dir: keep path, remove filename
+ $rc=&Apache::lonmsg::clear_author_res_msg($cleardir);
+ if ($rc eq 'ok') {
+ $message=&Apache::lonhtmlcommon::confirm_success(
+ &mt('Messages cleared.'));
+ $showbuttons=0;
} else {
- $bombs=&mt('Error clearing messages');
- }
- }
- my $del=&mt('Delete Messages for this Resource');
- my $clear=&mt('Clear all Messages in Subdirectory');
- my $goback=&mt('Back to Source File');
- $r->print(<$disuri
- |