--- loncom/interface/lonmeta.pm	2006/01/04 05:43:19	1.150
+++ loncom/interface/lonmeta.pm	2006/05/30 12:46:09	1.157
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Metadata display handler
 #
-# $Id: lonmeta.pm,v 1.150 2006/01/04 05:43:19 albertel Exp $
+# $Id: lonmeta.pm,v 1.157 2006/05/30 12:46:09 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -39,6 +39,8 @@ use Apache::lonpublisher;
 use Apache::lonlocal;
 use Apache::lonmysql;
 use Apache::lonmsg;
+use lib '/home/httpd/lib/perl/';
+use LONCAPA;
 
 
 ############################################################
@@ -71,7 +73,7 @@ sub get_dynamic_metadata_from_sql {
     if (! defined($authordom) || ! defined($author)) {
         return ();
     }
-    my @Fields = ('url','count','course',
+    my @Fields = ('url','count','course','course_list',
                   'goto','goto_list',
                   'comefrom','comefrom_list',
                   'sequsage','sequsage_list',
@@ -108,7 +110,7 @@ sub get_dynamic_metadata_from_sql {
             next if (! $result);
             my @Data = 
                 map { 
-                    &Apache::lonnet::unescape($_); 
+                    &unescape($_); 
                 } split(',',$result);
             my $url = $Data[0];
             for (my $i=0;$i<=$#Fields;$i++) {
@@ -296,25 +298,51 @@ sub fieldnames {
 }
 
 sub portfolio_linked_path {
-    my ($path) = @_;
-    my $result = &Apache::portfolio::make_anchor('portfolio','/');
+    my ($path,$group,$port_path) = @_;
+
+    my $start = 'portfolio';
+    if ($group) {
+	$start = "groups/$group/".$start;
+    }
+    my $result = &Apache::portfolio::make_anchor($port_path,$start,'/',
+						 undef,undef,undef,$group);
+    
     my $fullpath = '/';
     my (undef,@tree) = split('/',$path);
     my $filename = pop(@tree);
     foreach my $dir (@tree) {
 	$fullpath .= $dir.'/';
 	$result .= '/';
-	$result .= &Apache::portfolio::make_anchor($dir,$fullpath);
+	$result .= &Apache::portfolio::make_anchor($port_path,$dir,$fullpath,
+						   undef,undef,undef,$group);
     }
     $result .= "/$filename";
     return $result;
 }
 
+sub get_port_path_and_group {
+    my ($uri)=@_;
+
+    my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+    my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+
+    my ($port_path,$group);
+    if ($uri =~ m{^/editupload/\Q$cdom\E/\Q$cnum\E/groups/}) {
+	$group = (split('/',$uri))[5];
+	$port_path = '/adm/coursegrp_portfolio';
+    } else {
+	$port_path = '/adm/portfolio';
+    }
+    return ($port_path,$group);
+}
+
 sub portfolio_display_uri {
     my ($uri,$as_links)=@_;
+
+    my ($port_path,$group) = &get_port_path_and_group($uri);
+
     $uri =~ s|.*/(portfolio/.*)$|$1|;
     my ($res_uri,$meta_uri) = ($uri,$uri);
-
     if ($uri =~ /\.meta$/) {
 	$res_uri =~ s/\.meta//;
     } else {
@@ -322,10 +350,9 @@ sub portfolio_display_uri {
     }
 
     my ($path) = ($res_uri =~ m|^portfolio(.*/)[^/]*$|);
-
     if ($as_links) {
-	$res_uri = &portfolio_linked_path($res_uri);
-	$meta_uri = &portfolio_linked_path($meta_uri);
+	$res_uri = &portfolio_linked_path($res_uri,$group,$port_path);
+	$meta_uri = &portfolio_linked_path($meta_uri,$group,$port_path);
     }
     return ($res_uri,$meta_uri,$path);
 }
@@ -350,8 +377,10 @@ sub pre_select_course {
                   &mt('Associate Resource With Selected Course').'">');
     $r->print('</form>');
     
-    $r->print('<br /><br /><form method="POST" action="/adm/portfolio">'.
+    my ($port_path,$group) = &get_port_path_and_group($uri);
+    $r->print('<br /><br /><form method="POST" action="'.$port_path.'">'.
               '<input type="hidden" name="currentpath" value="'.$path.'" />'.
+	      '<input type="hidden" name="group" value="'.$group.'" />'.
 	      '<input type="submit" name="cancel" value="'.&mt('Cancel').'">'.
 	      '</form>');
 
@@ -447,7 +476,7 @@ sub prettyprint {
 	($type eq 'comefrom_list') ||
 	($type eq 'sequsage_list') ||
 	($type eq 'dependencies')) {
-	return '<ul><font size="-1">'.join("\n",map {
+	return '<font size="-1"><ul>'.join("\n",map {
             my $url = &Apache::lonnet::clutter($_);
             my $title = &Apache::lonnet::gettitle($url);
             if ($title eq '') {
@@ -484,18 +513,19 @@ sub prettyprint {
     # List of courses
     if ($type=~/\_list/) {
         my @Courses = split(/\s*\,\s*/,$value);
-        my $Str;
+        my $Str='<font size="-1"><ul>';
         foreach my $course (@Courses) {
-            my %courseinfo = &Apache::lonnet::coursedescription($course);
+            my %courseinfo =
+		&Apache::lonnet::coursedescription($course,
+						   {'one_time' => 1});
             if (! exists($courseinfo{'num'}) || $courseinfo{'num'} eq '') {
                 next;
             }
-            if ($Str ne '') { $Str .= '<br />'; }
-            $Str .= '<a href="/public/'.$courseinfo{'domain'}.'/'.
+            $Str .= '<li><a href="/public/'.$courseinfo{'domain'}.'/'.
                 $courseinfo{'num'}.'/syllabus" target="preview">'.
-                $courseinfo{'description'}.'</a>';
+                $courseinfo{'description'}.'</a></li>';
         }
-	return $Str;
+	return $Str.'</ul></font>';
     }
     # No pretty print found
     return $value;
@@ -702,19 +732,17 @@ sub handler {
     #
     my ($resdomain,$resuser)=
         (&Apache::lonnet::declutter($uri)=~/^(\w+)\/(\w+)\//);
-    my $html=&Apache::lonxml::xmlbegin();
-    $r->print($html.'<head><title>'.
-              'Catalog Information'.
-              '</title></head>');
+
     if ($uri=~m:/adm/bombs/(.*)$:) {
-        $r->print(&Apache::loncommon::bodytag('Error Messages'));
+        $r->print(&Apache::loncommon::start_page('Error Messages'));
         # Looking for all bombs?
         &report_bombs($r,$uri);
     } elsif ($uri=~/\/portfolio\//) {
 	    ($resdomain,$resuser)=
 	    (&Apache::lonnet::declutter($uri)=~m|^(\w+)/(\w+)/portfolio|);
-        $r->print(&Apache::loncommon::bodytag
-          ('Edit Portfolio File Information','','','',$resdomain));
+        $r->print(&Apache::loncommon::start_page('Edit Portfolio File Catalog Information',
+						 undef,
+						 {'domain' => $resdomain,}));
         if ($env{'form.store'}) {
             &present_editable_metadata($r,$uri,'portfolio');
         } else {
@@ -722,15 +750,17 @@ sub handler {
         }
     } elsif ($uri=~/^\/\~/) { 
         # Construction space
-        $r->print(&Apache::loncommon::bodytag
-                  ('Edit Catalog Information','','','',$resdomain));
+        $r->print(&Apache::loncommon::start_page('Edit Catalog nformation',
+						 undef,
+						 {'domain' => $resdomain,}));
         &present_editable_metadata($r,$uri);
     } else {
-        $r->print(&Apache::loncommon::bodytag
-		  ('Catalog Information','','','',$resdomain));
+        $r->print(&Apache::loncommon::start_page('Catalog Information',
+						 undef,
+						 {'domain' => $resdomain,}));
         &present_uneditable_metadata($r,$uri);
     }
-    $r->print('</body></html>');
+    $r->print(&Apache::loncommon::end_page());
     return OK;
 }
 
@@ -794,6 +824,7 @@ sub present_uneditable_metadata {
     my ($thisversion)=($uri=~/\.(\d+)\.(\w+)\.meta$/);
     $uri=~s/\.meta$//;
     my $disuri=&Apache::lonnet::clutter($uri);
+    $disuri=~s/^\/adm\/wrapper//;
     # version
     my $currentversion=&Apache::lonnet::getversion($disuri);
     my $versiondisplay='';
@@ -944,7 +975,9 @@ sub print_dynamic_metadata {
             foreach my $identifier (sort(keys(%{$dynmeta{'stats'}}))) {
                 my $data = $dynmeta{'stats'}->{$identifier};
                 my $course = $data->{'course'};
-                my %courseinfo = &Apache::lonnet::coursedescription($course);
+                my %courseinfo = 
+		    &Apache::lonnet::coursedescription($course,
+						       {'one_time' => 1});
                 if (! exists($courseinfo{'num'}) || $courseinfo{'num'} eq '') {
                     &Apache::lonnet::logthis('lookup for '.$course.' failed');
                     next;
@@ -1069,7 +1102,7 @@ sub present_editable_metadata {
     # Header
     my $disuri=$uri;
     my $fn=&Apache::lonnet::filelocation('',$uri);
-    $disuri=~s/^\/\~/\/priv\//;
+    $disuri=~s{^/\~}{/priv/};
     $disuri=~s/\.meta$//;
     my $meta_uri = $disuri;
     my $path;
@@ -1077,7 +1110,7 @@ sub present_editable_metadata {
 	($disuri, $meta_uri, $path) =  &portfolio_display_uri($disuri,1);
     }
     my $target=$uri;
-    $target=~s/^\/\~/\/res\/$env{'request.role.domain'}\//;
+    $target=~s{^/\~}{/res/$env{'request.role.domain'}/};
     $target=~s/\.meta$//;
     my $bombs=&Apache::lonmsg::retrieve_author_res_msg($target);
     if ($bombs) {
@@ -1265,8 +1298,10 @@ ENDEDIT
                   &mt('Store Catalog Information').'">');
 
 	if ($file_type eq 'portfolio') {
+	    my ($port_path,$group) = &get_port_path_and_group($uri);
 	    $r->print('</form>
-               <br /><br /><form method="POST" action="/adm/portfolio">'.
+               <br /><br /><form method="POST" action="'.$port_path.'">'.
+		      '<input type="hidden" name="group" value="'.$group.'" />'.
 		      '<input type="hidden" name="currentpath" value="'.$path.'" />'.
 		      '<input type="submit" name="cancel" value="'.&mt('Discard Edits and Return to Portfolio').'">');
 	}