--- loncom/interface/lonmeta.pm	2011/11/14 00:20:34	1.244
+++ loncom/interface/lonmeta.pm	2014/06/22 19:46:48	1.254
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Metadata display handler
 #
-# $Id: lonmeta.pm,v 1.244 2011/11/14 00:20:34 raeburn Exp $
+# $Id: lonmeta.pm,v 1.254 2014/06/22 19:46:48 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -351,7 +351,7 @@ sub pre_select_course {
     if ($group) {
         $group_input = '<input type="hidden" name="group" value="'.$group.'" />';
     } 
-    $r->print('<br /><br /><form method="post" action="'.$port_path.'">'.
+    $r->print(' <form method="post" action="'.$port_path.'">'.
               '<input type="hidden" name="currentpath" value="'.$path.'" />'.
 	      $group_input.
 	      '<input type="submit" name="cancel" value="'.&mt('Cancel').'" />'.
@@ -389,9 +389,9 @@ sub select_course {
                     &mt('You can choose to transfer data from the added fields to the "Notes" field if you are planning to change the course association.').'<br /><br />'.
                     &Apache::loncommon::start_data_table().
                     &Apache::loncommon::start_data_table_header_row().
-                    '<th>Copy to notes?</th>'."\n".
-                    '<th>Field name</th>'."\n".
-                    '<th>Values</th>'."\n".
+                    '<th>'.&mt('Copy to notes?').'</th>'."\n".
+                    '<th>'.&mt('Field Name').'</th>'."\n".
+                    '<th>'.&mt('Values').'</th>'."\n".
                     &Apache::loncommon::end_data_table_header_row().
                     $transfernotes.
                     &Apache::loncommon::end_data_table().'<br />';
@@ -455,7 +455,7 @@ sub prettyprint {
     }
     # MIME
     if ($type eq 'mime') {
-        return '<img src="'.&Apache::loncommon::icon($value).'" />&nbsp;'.
+        return '<img src="'.&Apache::loncommon::icon($value).'" alt="" />&nbsp;'.
             &Apache::loncommon::filedescription($value);
     }
     # Person
@@ -763,7 +763,7 @@ sub pageheader {
 sub handler {
     my $r=shift;
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
-         ['currentpath','changecourse']);
+         ['currentpath','changecourse','modal']);
     my $uri=$r->uri;
     #
     # Set document type
@@ -778,7 +778,7 @@ sub handler {
 
     if ($env{'request.state'} eq 'construct') {
         &Apache::lonhtmlcommon::add_breadcrumb({
-            'text'  => 'Construction Space',
+            'text'  => 'Authoring Space',
             'href'  => &Apache::loncommon::authorspace($uri),
         });
     }
@@ -829,7 +829,7 @@ sub handler {
         $r->print(&pageheader());
         &present_editable_metadata($r,$uri,'groups');    
     } elsif ($uri=~m|^/priv|) { 
-        # Construction space
+        # Authoring space
         &Apache::lonhtmlcommon::add_breadcrumb({
             'text'  => 'Edit Metadata',
             'href'  => '',
@@ -854,7 +854,21 @@ sub handler {
                 'only_body' => 1,})
            .'<h1>'.&mt('Metadata').'</h1>'
         );
+        if ($env{'form.modal'}) {
+            my $width = 500;
+            my $height = 400;
+            my $machine = &Apache::lonnet::absolute_url();
+            $r->print(&Apache::loncommon::nicescroll_javascript('metadatawrapper',
+                                                                {cursorcolor => '#00F',
+                                                                 railalign => 'right',
+                                                                 railoffset => '{top:5,left:40}'},
+                                                                 undef,1,$machine.$uri));
+            $r->print('<div id="metadatawrapper" style="height:'.$height.'px; width:'.$width.'px; overflow: auto;">');
+        }
         &present_uneditable_metadata($r,$uri);
+        if ($env{'form.modal'}) {
+            $r->print('</div>');
+        }
     }
     $r->print(&Apache::loncommon::end_page());
     return OK;
@@ -872,22 +886,50 @@ sub report_bombs {
     # Set document type
     $uri =~ s:/adm/bombs/::;
     $uri = &Apache::lonnet::declutter($uri);
-    $r->print('<h1>'.&Apache::lonnet::clutter($uri).'</h1>');
+    $r->print(
+        '<p>'.&mt('Folder: [_1]',
+                  '<span class="LC_filename">'.&Apache::lonnet::clutter($uri).'</span>')
+       .'</p>'
+    );
     my ($domain,$author)=($uri=~/^($match_domain)\/($match_username)\//);
-    if (&Apache::loncacc::constructaccess('/priv/'.$domain.'/'.$author.'/')) {
-	if ($env{'form.clearbombs'}) {
-	    &Apache::lonmsg::clear_author_res_msg($uri);
-	}
-        my $clear=&mt('Clear all Messages in Subdirectory');
-        my $cancel=&mt('Back to Directory');
-        my $cancelurl=$uri;
-        $cancelurl=~s/^\Q$domain\E/\/priv/;
-        $r->print(<<ENDCLEAR);
-<form method="post">
-<input type="submit" name="clearbombs" value="$clear" />
-<a href="$cancelurl">$cancel</a>
-</form><hr />
-ENDCLEAR
+    if (!&Apache::lonnet::constructaccess('/priv/'.$domain.'/'.$author.'/')) {
+        $r->print('<p class="LC_error">'.&mt('Not authorized').'</p>');
+        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)
+                        .'<br />'.&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(
+            '<form method="post" action="">'.
+            '<input type="submit" name="clearbombs" value="'.
+                &mt('Clear all Messages in Subdirectory').'" />'.
+            ' <a href="'.$cancelurl.'">'.
+                &mt('Back to Source Directory').'</a>'.
+            '</form><hr />'
+        );
+        # Display all bombs of subdirectory
         my %brokenurls = 
             &Apache::lonmsg::all_url_author_res_msg($author,$domain);
         foreach my $key (sort(keys(%brokenurls))) {
@@ -899,7 +941,12 @@ ENDCLEAR
             }
         }
     } else {
-        $r->print(&mt('Not authorized'));
+            my $functions=&Apache::lonhtmlcommon::start_funclist('Actions');
+            $functions.=&Apache::lonhtmlcommon::add_item_funclist(
+                            '<a href="'.$cancelurl.'">'.
+                            &mt('Back to Source Directory').'</a>');
+            $functions .= &Apache::lonhtmlcommon::end_funclist();
+            $r->print('<p>'.$functions.'</p>');
     }
     return;
 }
@@ -936,7 +983,7 @@ 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 
@@ -954,7 +1001,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) {
@@ -1089,9 +1136,11 @@ sub print_dynamic_metadata {
         if (exists($dynmeta{'stats'})) {
             my $table=&Apache::loncommon::start_data_table()
                      .&Apache::loncommon::start_data_table_header_row()
+		     .'<th>'.&mt('Domain').'</th>'
                      .'<th>'.&mt('Course').'</th>'
                      .'<th>'.&mt('Section(s)').'</th>'
                      .'<th>'.&mt('Num Students').'</th>'
+                     .'<th>'.&mt('Part').'</th>'
                      .'<th>'.&mt('Mean Tries').'</th>'
                      .'<th>'.&mt('Degree of Difficulty').'</th>'
                      .'<th>'.&mt('Degree of Discrimination').'</th>'
@@ -1108,12 +1157,16 @@ sub print_dynamic_metadata {
                     next;
                 }
                 $table .= &Apache::loncommon::start_data_table_row();
+		$table .=
+		    '<td><span class="LC_nobreak">'.$courseinfo{'domain'}.'</span></td>';
                 $table .= 
                     '<td><span class="LC_nobreak">'.$courseinfo{'description'}.'</span></td>';
                 $table .= 
                     '<td align="right">'.$data->{'sections'}.'</td>';
                 $table .=
                     '<td align="right">'.$data->{'stdno'}.'</td>';
+                $table .=
+                    '<td align="right">'.$data->{'part'}.'</td>';
                 foreach my $item ('avetries','difficulty','disc') {
                     $table .= '<td align="right">';
                     if (exists($data->{$item})) {
@@ -1142,7 +1195,6 @@ sub print_dynamic_metadata {
           &mt('No Assessment Statistical Data is available for this resource').
                   '</h4>');
     }
-
     #
     # Evaluation Data
     $r->print('<h4>'.&mt('Evaluation Data').'</h4>');
@@ -1190,7 +1242,7 @@ sub print_dynamic_metadata {
         my $bombs = &Apache::lonmsg::retrieve_author_res_msg($uri);
         if (defined($bombs) && $bombs ne '') {
             $r->print('<a name="bombs" />'
-                     .'<h4 class="LC_error">'.&mt('Error Messages').'</h4>'
+                     .'<h4 class="LC_warning">'.&mt('Error Messages').'</h4>'
                      .'<div>('
                      .&mt('visible to author and co-authors only')
                      .')</div>'
@@ -1257,7 +1309,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);
@@ -1273,48 +1325,74 @@ 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(
+            '<h2>'.&mt('Error Messages').'</h2>'
+           .'<p>'.&mt('Folder: [_1]',
+                      '<span class="LC_filename">'.$disuri.'</span>')
+           .'</p>'
+        );
+        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)
+                        .'<br />'.&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');
+                $message=&Apache::lonhtmlcommon::confirm_success(
+                             &mt('Error clearing messages'),1)
+                        .'<br />'.&mt('Error: [_1]',$rc);
             }
         }
-        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(<<ENDBOMBS);
-<h1>$disuri</h1>
-<form method="post" action="" name="defaultmeta">
-ENDBOMBS
-        if ($showdel) {
-	    $r->print(<<ENDDEL);
-<input type="submit" name="delmsg" value="$del" />
-<input type="submit" name="clearmsg" value="$clear" />
-ENDDEL
+        if ($message) {
+            $message=&Apache::loncommon::confirmwrapper($message);
+            $r->print($message);
+        }
+
+        $r->print('<form method="post" action="" name="defaultmeta">');
+        if ($showbuttons) {
+            $r->print(
+                '<input type="submit" name="delmsg" value="'.
+                &mt('Delete Messages for this Resource').'" />'.
+                '<input type="submit" name="clearmsg" value="'.
+                &mt('Clear all Messages in Subdirectory').'" />'
+               .'<br />'.$bombs
+            );
         } else {
-            $r->print('<p><a href="'.$disuri.'">'.$goback.'</a></p>');
-	    if ($env{'form.clearmsg'}) {
-		my ($diruri) = ($disuri =~ m{(.*/)[^/]*});
-		$r->print('<p><a href="'.$diruri.'">'.
-			  &mt('Back To Directory').'</a></p>');
-	    }
-	}
-	$r->print('<br />'.$bombs);
+            my $functions=&Apache::lonhtmlcommon::start_funclist('Actions');
+            $functions.=&Apache::lonhtmlcommon::add_item_funclist(
+                            '<a href="'.$disuri.'">'.
+                            &mt('Back to Source File').'</a>');
+            my ($diruri) = ($disuri =~ m{(.*/)[^/]*});
+            $functions.=&Apache::lonhtmlcommon::add_item_funclist(
+                            '<a href="'.$diruri.'">'.
+                            &mt('Back to Source Directory').'</a>');
+            $functions .= &Apache::lonhtmlcommon::end_funclist();
+            $r->print('<p>'.$functions.'</p>');
+        }
     } else {
-        my $displayfile=&mt('Metadata for [_1]',$disuri);
+
+        # Display Metadata, not Bombs
+        my $displayfile =
+            &mt('Metadata for [_1]'
+               ,'<span class="LC_filename">'.$disuri.'</span>');
         if ($disuri=~/\/default$/) {
             my $dir=$disuri;
             $dir=~s/default$//;
@@ -1325,7 +1403,11 @@ ENDDEL
         %Apache::lonpublisher::metadatakeys=();
         my $result=&Apache::lonnet::getfile($fn);
         if ($result == -1){
-	    $r->print(&mt('Creating new file [_1]'),$meta_uri);
+            my $message = &Apache::lonhtmlcommon::confirm_success(
+                &mt('Creating new file [_1]'
+                   ,'<span class="LC_filename"'.$meta_uri.'</span>'));
+            $message = &Apache::loncommon::confirmwrapper($message);
+            $r->print($message);
         } else {
             &Apache::lonpublisher::metaeval($result);
         }
@@ -1346,7 +1428,7 @@ ENDDEL
             }
         }
         $r->print(<<ENDEDIT);
-<p>$displayfile</p>
+<h2>$displayfile</h2>
 <form method="post" action="" name="defaultmeta">
 ENDEDIT
         my %lt=&fieldnames($file_type);
@@ -1372,7 +1454,7 @@ ENDEDIT
 	        @fields = (split(/,/,$env{$Apache::lonpublisher::metadatafields{'courserestricted'}.'.metadata.fieldlist'}));
 	    } else {
 	        # no saved field list, use default list
-	        @fields =  ('author','title','subject','keywords','abstract',
+	        @fields =  ('title','author','subject','keywords','abstract',
 			    'notes','lowestgradelevel',
 	                    'highestgradelevel','standards');
                 if ($Apache::lonpublisher::metadatafields{'courserestricted'} =~ /^course\.($match_domain\_$match_courseid)$/) {
@@ -1385,7 +1467,7 @@ ENDEDIT
                 }
 	    }
 	} else {
-	    @fields = ('author','title','subject','keywords','abstract','notes',
+	    @fields = ('title','author','subject','keywords','abstract','notes',
 		       'copyright','customdistributionfile','language',
 		       'standards',
 		       'lowestgradelevel','highestgradelevel','sourceavail','sourcerights',
@@ -1412,21 +1494,29 @@ ENDEDIT
 	    if ($Apache::lonpublisher::metadatafields{'courserestricted'} ne 'none') {
 
                 if ($file_type eq 'portfolio') {
-		    $r->print(&mt('Associated with course [_1]',
-		        '<strong><a href="'.$uri.'?changecourse=true">'.
-		        $env{$Apache::lonpublisher::metadatafields{'courserestricted'}.
-		        ".description"}.
-			      '</a></strong>').'<br />');
+                    $r->print(
+                        &mt('Associated with course [_1]'
+                           ,'<strong>'
+                           .$env{$Apache::lonpublisher::metadatafields{'courserestricted'}
+                           .".description"}.'</strong>')
+                       .' <a href="'.$uri.'?changecourse=true">'
+                       .&mt('Change')
+                       .'</a>'.'<br />'
+                    );
+
                 } else {
                     $r->print(&mt('Associated with course [_1]',
                         '<strong>'.
   $env{$Apache::lonpublisher::metadatafields{'courserestricted'}.
                         ".description"}.'</strong>').'<br />');
                 }
-	    } else {
-		$r->print('<a href="'.$uri.'?changecourse=true">'.&mt('This resource is not associated with a course.').'</a><br />');
-	    }
-	}
+            } else {
+                $r->print(
+                    &mt('This resource is not associated with a course.')
+                  .' <a href="'.$uri.'?changecourse=true">'.&mt('Change').'</a><br />'
+                );
+            }
+        }
 	if (@added_order) {
 	    foreach my $field_name (@added_order) {
                 push(@fields,$field_name);