--- loncom/interface/lonmeta.pm	2007/01/02 11:38:28	1.191
+++ loncom/interface/lonmeta.pm	2007/01/15 20:51:52	1.197
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Metadata display handler
 #
-# $Id: lonmeta.pm,v 1.191 2007/01/02 11:38:28 raeburn Exp $
+# $Id: lonmeta.pm,v 1.197 2007/01/15 20:51:52 banghart Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -601,6 +601,10 @@ sub prettyinput {
                     $cur_values_stu .= $item.',';
                 }
             }
+            my @key_order = sort(keys(%meta_options));
+            unshift (@key_order,'Not Specified');
+            $meta_options{'Not Specified'} = 'Not Specified';
+            $meta_options{'select_form_order'} = \@key_order;
         } else {
             $cur_values_stu = $value;
         }
@@ -613,6 +617,7 @@ sub prettyinput {
              || ($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'}))) {
+            
             if ($values) {
                 if ($only_one) {
                     $output .= (&Apache::loncommon::select_form($cur_values_inst[0],'new_'.$type,%meta_options));
@@ -750,7 +755,6 @@ sub handler {
             %Apache::lonpublisher::metadatakeys=();
             my $result=&Apache::lonnet::getfile($fn);
             &Apache::lonpublisher::metaeval($result);
-            &Apache::lonnet::logthis("restricted is: ".$Apache::lonpublisher::metadatafields{'courserestricted'});
             if ((!$Apache::lonpublisher::metadatafields{'courserestricted'}) ||
                 ($env{'form.changecourse'} eq 'true')) {
                 &pre_select_course($r,$uri);
@@ -1203,6 +1207,18 @@ ENDEDIT
 	my @fields;
 	my $added_metadata_fields;
 	my @added_order;
+        if ($file_type eq 'groups') {
+            $Apache::lonpublisher::metadatafields{'courserestricted'}=
+                'course.'.$env{'request.course.id'};
+        }
+        if ((! $Apache::lonpublisher::metadatafields{'courserestricted'}) &&
+                (! $env{'form.new_courserestricted'}) && (! $file_type eq 'groups')) {
+            $Apache::lonpublisher::metadatafields{'courserestricted'}=
+                'none';
+        } elsif ($env{'form.new_courserestricted'}) {
+            $Apache::lonpublisher::metadatafields{'courserestricted'}=
+                $env{'form.new_courserestricted'};
+        }
 	if ($file_type eq 'portfolio' || $file_type eq 'groups') {
 	    if(exists ($env{$Apache::lonpublisher::metadatafields{'courserestricted'}.'.metadata.fieldlist'})) {
 	        # retrieve fieldnames (in order) from the course restricted list
@@ -1212,11 +1228,14 @@ ENDEDIT
 	        @fields =  ('author','title','subject','keywords','abstract',
 			    'notes','lowestgradelevel',
 	                    'highestgradelevel','standards');
-	        $added_metadata_fields = &Apache::lonparmset::get_added_meta_fieldnames();
-	        if ($env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'}) {
-	            @added_order = split(/,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'});
-	        }
-	        $env{$Apache::lonpublisher::metadatafields{'courserestricted'}.'.metadata.fieldlist'} = join(",",@fields);
+                if ($Apache::lonpublisher::metadatafields{'courserestricted'} =~ /^course\.($match_domain\_$match_courseid)$/) {
+                    my $assoc_crs = $1;
+	            $added_metadata_fields = &Apache::lonparmset::get_added_meta_fieldnames($assoc_crs);
+	            if ($env{'course.'.$assoc_crs.'.metadata.addedorder'}) {
+	                @added_order = split(/,/,$env{'course.'.$assoc_crs.'.metadata.addedorder'});
+	            }
+	            $env{$Apache::lonpublisher::metadatafields{'courserestricted'}.'.metadata.fieldlist'} = join(",",@fields);
+                }
 	    }
 	} else {
 	    @fields = ('author','title','subject','keywords','abstract','notes',
@@ -1225,18 +1244,6 @@ ENDEDIT
 		       'lowestgradelevel','highestgradelevel','sourceavail','sourcerights',
 		       'obsolete','obsoletereplacement');
         }
-        if ($file_type eq 'groups') {
-            $Apache::lonpublisher::metadatafields{'courserestricted'}=
-                'course.'.$env{'request.course.id'}; 
-        }
-        if ((! $Apache::lonpublisher::metadatafields{'courserestricted'}) &&
-                (! $env{'form.new_courserestricted'}) && (! $file_type eq 'groups')) {
-            $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';
@@ -1250,8 +1257,8 @@ ENDEDIT
 		$Apache::lonpublisher::metadatafields{'owner'} =
 		    $env{'user.name'}.':'.$env{'user.domain'};
 	    }
-
 	    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">'.
@@ -1349,7 +1356,7 @@ ENDEDIT
 		    ($path, $new_fn) = ($fn =~ m|/(portfolio.*)/([^/]*)$|);
 	        }
                 $r->print(&store_portfolio_metadata($formname,$file_content,$path,
-                                                    $new_fn));
+                                                    $new_fn,$uri));
             } else {
 		if (! ($mfh=Apache::File->new('>'.$fn))) {
 		    $r->print('<p><font color="red">'.
@@ -1358,6 +1365,7 @@ ENDEDIT
 		} else {
 		    print $mfh ($file_content);
                     close($mfh);
+                    &update_metadata_table($uri);
 		    $r->print('<p><font color="blue">'.&mt('Wrote Metadata').
 			      ' '.&Apache::lonlocal::locallocaltime(time).
 			      '</font></p>');
@@ -1388,7 +1396,7 @@ ENDEDIT
 }
 
 sub store_portfolio_metadata {
-    my ($formname,$content,$path,$new_fn) = @_;
+    my ($formname,$content,$path,$new_fn,$uri) = @_;
     $env{'form.'.$formname}=$content."\n";
     $env{'form.'.$formname.'.filename'}=$new_fn;
     my $result =&Apache::lonnet::userfileupload($formname,'',$path);
@@ -1397,11 +1405,42 @@ sub store_portfolio_metadata {
                   &mt('Could not write metadata').', '.
                   &mt('FAIL').'</font></p>';
     } else {
+        &update_metadata_table($uri);
         return '<p><font color="blue">'.&mt('Wrote Metadata').
                   ' '.&Apache::lonlocal::locallocaltime(time).'</font></p>';
     }
 }
 
+sub update_metadata_table {
+    my ($uri) = @_;
+    my ($type,$udom,$uname,$file_name,$group) =
+	&Apache::lonnet::parse_portfolio_url($uri);
+    $file_name =~ s/\.meta$//;
+    my $current_permissions =
+        &Apache::lonnet::get_portfile_permissions($udom,$uname);
+    my %access_controls =
+        &Apache::lonnet::get_access_controls($current_permissions,$group,
+                                             $file_name);
+    my $access_hash = $access_controls{$file_name};
+    my $available = 0;
+    if (ref($access_hash) eq 'HASH') {
+        foreach my $key (keys(%{$access_hash})) {
+            my ($num,$scope,$end,$start) =
+                ($key =~ /^([^:]+):([a-z]+)_(\d*)_?(\d*)$/);
+            if ($scope eq 'public' || $scope eq 'guest') {
+                $available = 1;
+                last;
+            }
+        }
+    }
+    if ($available) {
+        my $result =
+            &Apache::lonnet::update_portfolio_table($uname,$udom,
+            $file_name,'portfolio_metadata',$group,'update');
+    }
+}
+
+
 1;
 __END__