[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" /> '.$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--