[LON-CAPA-cvs] cvs: loncom /interface lonaboutme.pm portfolio.pm

raeburn lon-capa-cvs@mail.lon-capa.org
Tue, 19 Sep 2006 14:02:43 -0000


This is a MIME encoded message

--raeburn1158674563
Content-Type: text/plain

raeburn		Tue Sep 19 10:02:43 2006 EDT

  Modified files:              
    /loncom/interface	lonaboutme.pm portfolio.pm 
  Log:
  When "aboutme" page is called for a course, link to listing of group portfolio files is available.  Page containing listing now separates files by group, and includes working links to files (with metadata CAT button).
  
  
--raeburn1158674563
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20060919100243.txt"

Index: loncom/interface/lonaboutme.pm
diff -u loncom/interface/lonaboutme.pm:1.54 loncom/interface/lonaboutme.pm:1.55
--- loncom/interface/lonaboutme.pm:1.54	Wed Sep 13 17:37:29 2006
+++ loncom/interface/lonaboutme.pm	Tue Sep 19 10:02:42 2006
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # "About Me" Personal Information
 #
-# $Id: lonaboutme.pm,v 1.54 2006/09/13 21:37:29 albertel Exp $
+# $Id: lonaboutme.pm,v 1.55 2006/09/19 14:02:42 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -50,12 +50,16 @@
 	$r->print(&Apache::lonprintout::print_latex_header($env{'form.latex_type'}));
     }
     my (undef,undef,$cdom,$cnum,undef,$action)=split(/\//,$r->uri);
+    my $is_course;
 # Is this even a user?
     if (&Apache::lonnet::homeserver($cnum,$cdom) eq 'no_host') {
 	&Apache::loncommon::simple_error_page($r,'No info',
 					      'No user information available');
         return OK;
+    } else {
+        $is_course = &check_for_course($cdom,$cnum);
     }
+
 # --------------------------------------------------------- The syllabus fields
     my %syllabusfields=&Apache::lonlocal::texthash(
        'aaa_contactinfo'   => 'Contact Information',
@@ -69,12 +73,29 @@
 
 # ----------------------------------------------- Available Portfolio file display 
     if (($target ne 'tex') && ($action eq 'portfolio')) {
-        &display_portfolio_header($r);
-        &display_portfolio_files($r);
+        &display_portfolio_header($r,$is_course);
+        &display_portfolio_files($r,$is_course);
         $r->print(&Apache::loncommon::end_page());
         return OK;
     }
 
+    if ($is_course) {
+        if ($target ne 'tex') {
+            my $start_page =
+                &Apache::loncommon::start_page(
+                    "Course Information",
+                     undef,
+                     {'function' => $env{'forcestudent'},
+                      'domain'   => $cdom,
+                      'force_register' => $env{'forceregister'},});
+            $r->print($start_page);
+            $r->print('<h2>'.&mt('Group files').'</h2>');
+            &print_portfiles_link($r,$is_course);
+            $r->print(&Apache::loncommon::end_page());
+        }
+        return OK;
+    }
+
 # --------------------------------------------------------------- Force Student
     my $forcestudent='';
     if ($env{'form.forcestudent'}) { $forcestudent='student'; };
@@ -222,7 +243,7 @@
     }
 
     if ($target ne 'tex') {
-        &print_portfiles_link($r);
+        &print_portfiles_link($r,$is_course);
     }
 
     if ($env{'request.course.id'}) {
@@ -261,27 +282,43 @@
 }
 
 sub aboutme_info {
-    my ($r) = @_;
+    my ($r,$is_course) = @_;
     my (undef,undef,$cdom,$cnum)=split(/\//,$r->uri);
-    my $name = &Apache::loncommon::plainname($cnum,$cdom);
+    my $name;
+    if (!$is_course) {
+        $name = &Apache::loncommon::plainname($cnum,$cdom);
+    }
     return ($cdom,$cnum,$name);
 }
 
 sub print_portfiles_link {
-    my ($r) = @_;
-    my ($cdom,$cnum,$name) = &aboutme_info($r);
-    my $filecounts = &portfolio_files($r,'showlink');
+    my ($r,$is_course) = @_;
+    my ($cdom,$cnum,$name) = &aboutme_info($r,$is_course);
+    my $filecounts = &portfolio_files($r,'showlink',undef,$is_course);
     my $query_string = &build_query_string();
     my $output;
+    my %lt = &Apache::lonlocal::texthash(
+                         vpfi => 'Viewable portfolio files',
+                         vgpf => 'Viewable group portfolio files',
+                         difl => 'Display file listing',
+             );                     
     if ($filecounts->{'both'} > 0) {
-        $output = &mt('<h3>Viewable portfolio files</h3>');
+        $output = '<h3>'.($is_course?$lt{'vgpf'}:$lt{'vpfi'}).'</h3>';
         $output .= '<a href="/adm/'.$cdom.'/'.$cnum.'/aboutme/portfolio'.
-                   $query_string.'">'.&mt('Display file listing').
+                   $query_string.'">'.$lt{'difl'}.
                    '</a><br /><br />';
         if ($filecounts->{'both'} == 1) {
-            $output .= &mt('One portfolio file owned by [_2] is available.',$filecounts->{'both'},$name).'<ul>';
+            if ($is_course) {
+                $output .= &mt('One group portfolio file is available.').'<ul>';
+            } else {
+                $output .= &mt('One portfolio file owned by [_1] is available.').'<ul>';
+            }
         } else {
-            $output .= &mt('A total of [_1] portfolio files owned by [_2] are available.',$filecounts->{'both'},$name).'<ul>';
+            if ($is_course) {
+                $output .= &mt('A total of [_1] group portfolio files are available.').'<ul>';
+            } else {
+                $output .= &mt('A total of [_1] portfolio files owned by [_2] are available.',$filecounts->{'both'},$name).'<ul>';
+            }
         }
         if ($filecounts->{'withoutpass'}) {
 	    $output .= '<li>'.&mt('[quant,_1,file is,files are] publicly accessible.',$filecounts->{'withoutpass'}).'</li>';
@@ -326,35 +363,44 @@
 }
 
 sub display_portfolio_header {
-    my ($r) = @_;
-    my ($cdom,$cnum,$name) = &aboutme_info($r);
+    my ($r,$is_course) = @_;
+    my ($cdom,$cnum,$name) = &aboutme_info($r,$is_course);
     my $query_string = &build_query_string();
     &Apache::lonhtmlcommon::clear_breadcrumbs();
     my $forcestudent='';
     if ($env{'form.forcestudent'}) { $forcestudent='student'; };
-    my $output = 
-        &Apache::loncommon::start_page('Viewable portfolio files',undef,
-                                            {'function' => $forcestudent, 
+
+    my $output;
+    if ($is_course) {
+        $output = 
+            &Apache::loncommon::start_page('Viewable group portfolio files',undef,
+                                            {'function' => $forcestudent,
                                              'domain'   => $cdom,});
-    if (!($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public')) {
-        &Apache::lonhtmlcommon::add_breadcrumb
-            ({href=>"/adm/$cdom/$cnum/aboutme".$query_string,
-              text=>"Personal information - $name",
-              title=>"Go to personal information page for $name"},
-             {href=>"/adm/$cdom/$cnum/aboutme/portfolio",
-              text=>"Viewable files - $name",
-              title=>"Viewable portfolio files for $name"}
-        );
-        $output .= &Apache::lonhtmlcommon::breadcrumbs(&mt('Viewable portfolio files.'));
+        $output .= '<h3>'.&mt('Group Portfolio files').'</h3>';
+    } else {
+        $output  =
+            &Apache::loncommon::start_page('Viewable portfolio files',undef,
+                                            {'function' => $forcestudent,
+                                             'domain'   => $cdom,});
+        if (!($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public')) {
+            &Apache::lonhtmlcommon::add_breadcrumb
+                ({href=>"/adm/$cdom/$cnum/aboutme".$query_string,
+                  text=>"Personal information - $name",
+                  title=>"Go to personal information page for $name"},                 {href=>"/adm/$cdom/$cnum/aboutme/portfolio",
+                  text=>"Viewable files - $name",
+                  title=>"Viewable portfolio files for $name"}
+            );
+            $output .= &Apache::lonhtmlcommon::breadcrumbs(&mt('Viewable portfolio files.'));
+        }
+        $output .= '<h3>'.&mt('Portfolio files for [_1]',$name).'</h3>';
     }
-    $output .= '<h3>'.&mt('Portfolio files for [_1]',$name).'</h3>';
     $r->print($output);
     return;
 }
 
 sub display_portfolio_files {
-    my ($r) = @_;
-    my ($cdom,$cnum,$name) = &aboutme_info($r);
+    my ($r,$is_course) = @_;
+    my ($cdom,$cnum,$name) = &aboutme_info($r,$is_course);
     my %lt = ( withoutpass => 'passphrase not required',
 	       withpass    => 'passphrase protected',
 	       both        => 'all access types ',);
@@ -380,19 +426,24 @@
                &mt('Update display').'" />';
     $output .= '</form><br /><br />';
     $r->print($output);
-    my $filecounts = &portfolio_files($r,'listfiles',\%lt);
+    my $filecounts = &portfolio_files($r,'listfiles',\%lt,$is_course);
     if (!($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public')) {
         my $query_string = &build_query_string();
         $r->print('<br /><br /><a href="/adm/'.$cdom.'/'.$cnum.
-                  '/aboutme'.$query_string.'">'.
-                  &mt('Information about [_1]',$name).'</a>');
+                  '/aboutme'.$query_string.'">');
+        if ($is_course) {
+            $r->print(&mt('Course Information page'));
+        } else {
+            $r->print(&mt('Information about [_1]',$name));
+        }
+        $r->print('</a>');
     }
     return;
 }
 
 sub portfolio_files {
-    my ($r,$mode,$lt) = @_;
-    my ($cdom,$cnum,$name) = &aboutme_info($r);
+    my ($r,$mode,$lt,$is_course) = @_;
+    my ($cdom,$cnum,$name) = &aboutme_info($r,$is_course);
     my $filecounts = {
                        withpass    => 0,
                        withoutpass => 0,
@@ -402,7 +453,6 @@
 	&Apache::lonnet::get_portfile_permissions($cdom,$cnum);
     my %access_controls = 
 	&Apache::lonnet::get_access_controls($current_permissions);
-    my %allfileshash;
     my $portaccess;
     if ($mode eq 'showlink') {
         $portaccess = 'both';
@@ -413,10 +463,63 @@
         }
     }
 
-    foreach my $filename (keys(%access_controls)) {
-        my $access_status = 
-            &Apache::lonnet::get_portfolio_access($cdom,$cnum,$filename,undef,
-						  $access_controls{$filename});
+    my $diroutput;
+    if ($is_course) {
+        my %files_by_group;
+        foreach my $filename (sort(keys(%access_controls))) {
+            my ($group,$path) = split('/',$filename,2);
+            $files_by_group{$group}{$path} = $access_controls{$filename}; 
+        }
+        foreach my $group (sort(keys(%files_by_group))) {
+            my %fileshash;
+            my $grpout .= &build_hierarchy($r,$cdom,$cnum,$portaccess,
+                                           $is_course,$filecounts,$mode,
+                                           $files_by_group{$group},
+                                           \%fileshash,$group);
+            if ($grpout) {
+                $diroutput .= '<h3>'.$group.'</h3>'.$grpout.'<br />';
+            }
+        }
+    } else {
+        my %allfileshash;
+        $diroutput = &build_hierarchy($r,$cdom,$cnum,$portaccess,$is_course,
+                                      $filecounts,$mode,\%access_controls,
+                                      \%allfileshash);
+    }
+    if ($mode eq 'listfiles') {
+        if ($filecounts->{'both'}) {
+             $r->print($diroutput);
+        } else {
+            my $access_text;
+            if (ref($lt) eq 'HASH') {
+                $access_text = $lt->{$portaccess};   
+            }
+            $r->print(&mt('There are no available files of the specified access type: [_1]',$access_text));
+        }
+    }
+    return $filecounts;
+}
+
+{ 
+    my $count=0;
+    sub portfolio_table_start {
+	$count=0;
+	return '<table class="LC_aboutme_port">';
+    }
+    sub portfolio_row_start {
+	$count++;
+	my $class = ($count%2)?'LC_odd_row'
+	                      :'LC_even_row';
+	return '<tr class="'.$class.'">';
+    }
+}
+
+sub build_hierarchy {
+    my ($r,$cdom,$cnum,$portaccess,$is_course,$filecounts,$mode,$access_info,
+        $allfileshash,$group) = @_;
+    foreach my $filename (sort(keys(%{$access_info}))) {
+        my $access_status =
+           &Apache::lonnet::get_portfolio_access($cdom,$cnum,$filename,$group,                                                 $$access_info{$filename});
         if ($portaccess eq 'both') {
             if (($access_status ne 'ok') &&
                 ($access_status !~  /^[^:]+:guest_/)) {
@@ -434,7 +537,7 @@
         if ($mode eq 'listfiles') {
             $filename =~ s/^\///;
             my @pathitems = split('/',$filename);
-            my $lasthash = \%allfileshash;
+            my $lasthash = $allfileshash;
             while (@pathitems > 1) {
                 my $newlevel = shift(@pathitems);
                 if (!exists($lasthash->{$newlevel})) {
@@ -452,45 +555,26 @@
     }
     $filecounts->{'both'} =  $filecounts->{'withoutpass'} +
                               $filecounts->{'withpass'};
+    my $output;
     if ($mode eq 'listfiles') {
-        my $output;
-        if (keys(%allfileshash) > 0) {
+        if ($filecounts->{'both'} > 0) {
             $output = &portfolio_table_start();
-            $output .= &parse_directory($r,0,\%allfileshash,'');
+            $output .= &parse_directory($r,0,$allfileshash,'',$is_course,
+                                        $group);
             $output .= '</table>';
-        } else {
-            my $access_text;
-            if (ref($lt) eq 'HASH') {
-                $access_text = $lt->{$portaccess};   
-            }
-            $output .= &mt('There are no available files of the specified access type: [_1]',$access_text);
         }
-        $r->print($output);
-    }
-    return $filecounts;
-}
-
-{ 
-    my $count=0;
-    sub portfolio_table_start {
-	$count=0;
-	return '<table class="LC_aboutme_port">';
-    }
-    sub portfolio_row_start {
-	$count++;
-	my $class = ($count%2)?'LC_odd_row'
-	                      :'LC_even_row';
-	return '<tr class="'.$class.'">';
     }
+    return $output;
 }
 
 sub parse_directory {
-    my ($r,$depth,$currhash,$path) = @_;
-    my ($cdom,$cnum,$name) = &aboutme_info($r);
+    my ($r,$depth,$currhash,$path,$is_course,$group) = @_;
+    my ($cdom,$cnum,$name) = &aboutme_info($r,$is_course);
     $depth++;
     my $output;
 
-    my $portfolio_root = &Apache::portfolio::get_portfolio_root($cdom,$cnum);
+    my $portfolio_root = &Apache::portfolio::get_portfolio_root($cdom,$cnum,
+                                                                $group);
     my %dirlist = map {
 	    ((split('&',$_,2))[0],1)
 	} &Apache::lonnet::dirlist($path,$cdom,$cnum,$portfolio_root);
@@ -502,10 +586,8 @@
             $output .= '<img src="'.&Apache::loncommon::lonhttpdurl("/adm/lonIcons/navmap.folder.open.gif").'" alt="'.&mt('Folder').' '.$title.'" class="LC_icon" />&nbsp;'.$title;
 	    $output .= '</td><td></td></tr>';
             $output .= &parse_directory($r,$depth,$currhash->{$item},
-					$path.'/'.$item);
+					$path.'/'.$item,$is_course,$group);
         } else {
-	   
-
 	    my $file_name; 
 	    if ($currhash->{$item} =~ m|/([^/]+)$|) {
 		$file_name = $1;
@@ -513,9 +595,14 @@
 		$file_name = $currhash->{$item};
 	    }
 	    my $have_meta = exists($dirlist{$file_name.'.meta'});
-	    my $url = '/uploaded/'.$cdom.'/'.$cnum.'/portfolio/'.
-		$currhash->{$item};
-
+            my $url;
+            if ($is_course) {
+                $url = '/uploaded/'.$cdom.'/'.$cnum.'/groups/'.$group.
+                       '/portfolio/'.$currhash->{$item};
+            } else { 
+	        $url = '/uploaded/'.$cdom.'/'.$cnum.'/portfolio/'.
+		       $currhash->{$item};
+            }
             my $showname;
 	    if ($have_meta) {
 		$showname = &Apache::lonnet::metadata($url,'title');
@@ -542,5 +629,15 @@
     return $output;
 }
 
+sub check_for_course {
+    my ($cdom,$cnum) = @_;
+    my %courses = &Apache::lonnet::courseiddump($cdom,'.',1,'.','.',$cnum,undef,
+                                                undef,'.');
+    if (exists($courses{$cdom.'_'.$cnum})) {
+        return 1;
+    }
+    return 0;
+}
+
 1;
 __END__
Index: loncom/interface/portfolio.pm
diff -u loncom/interface/portfolio.pm:1.162 loncom/interface/portfolio.pm:1.163
--- loncom/interface/portfolio.pm:1.162	Thu Aug 24 14:28:43 2006
+++ loncom/interface/portfolio.pm	Tue Sep 19 10:02:42 2006
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # portfolio browser
 #
-# $Id: portfolio.pm,v 1.162 2006/08/24 18:28:43 banghart Exp $
+# $Id: portfolio.pm,v 1.163 2006/09/19 14:02:42 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1688,16 +1688,19 @@
 }
 
 sub get_portfolio_root {
-    my ($udom,$uname) = @_;
+    my ($udom,$uname,$group) = @_;
     if (!(defined($udom)) || !(defined($uname))) {
         ($uname,$udom) = &get_name_dom();
     }
-    my $path;
-    if (defined($env{'form.group'})) {
-        $path = '/userfiles/groups/'.$env{'form.group'}.'/portfolio';
-    } else {
-        $path = '/userfiles/portfolio';
+    my $path = '/userfiles/portfolio';
+    if (!defined($group)) { 
+        if (defined($env{'form.group'})) {
+            $group = $env{'form.group'};      
+        }
     }
+    if (defined($group)) {
+        $path = '/userfiles/groups/'.$group.'/portfolio';
+    } 
     return (&Apache::loncommon::propath($udom,$uname).$path);
 }
 

--raeburn1158674563--