--- loncom/interface/lonaboutme.pm 2006/08/08 17:24:07 1.51
+++ loncom/interface/lonaboutme.pm 2008/01/16 12:19:39 1.66
@@ -1,7 +1,7 @@
# The LearningOnline Network
# "About Me" Personal Information
#
-# $Id: lonaboutme.pm,v 1.51 2006/08/08 17:24:07 albertel Exp $
+# $Id: lonaboutme.pm,v 1.66 2008/01/16 12:19:39 bisitz Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -37,6 +37,7 @@ use Apache::lonfeedback;
use Apache::lonrss();
use Apache::lonlocal;
use Apache::lonmsgdisplay();
+use HTML::Entities();
sub handler {
my $r = shift;
@@ -49,12 +50,16 @@ sub handler {
$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 = &Apache::lonnet::is_course($cdom,$cnum);
}
+
# --------------------------------------------------------- The syllabus fields
my %syllabusfields=&Apache::lonlocal::texthash(
'aaa_contactinfo' => 'Contact Information',
@@ -68,12 +73,35 @@ sub handler {
# ----------------------------------------------- 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);
+ my ($blocked,$blocktext) =
+ &Apache::loncommon::blocking_status('port',$cnum,$cdom);
+ if (!$blocked) {
+ &display_portfolio_files($r,$is_course);
+ } else {
+ $r->print($blocktext);
+ }
$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('
'.&mt('Group files').'
');
+ &print_portfiles_link($r,$is_course);
+ $r->print(&Apache::loncommon::end_page());
+ }
+ return OK;
+ }
+
# --------------------------------------------------------------- Force Student
my $forcestudent='';
if ($env{'form.forcestudent'}) { $forcestudent='student'; };
@@ -86,8 +114,9 @@ sub handler {
# --------------------------------------- There is such a user, get environment
my %courseenv=&Apache::lonnet::dump('environment',$cdom,$cnum);
if ($target ne 'tex') {
+ my $rss_link = &Apache::lonrss::rss_link($cnum,$cdom);
my $start_page =
- &Apache::loncommon::start_page("Personal Information",undef,
+ &Apache::loncommon::start_page("Personal Information", $rss_link,
{'function' => $forcestudent,
'domain' => $cdom,
'force_register' =>
@@ -103,10 +132,10 @@ sub handler {
'"');
}
if ($target ne 'tex') {
- $r->print(''.$Apache::lonnet::domaindescription{$cdom}.'
'.
- ''.&Apache::loncommon::messagewrapper('Send me a message',$cnum,$cdom).'
'.&Apache::lonrss::advertisefeeds($cnum,$cdom));
+ $r->print(''.&Apache::lonnet::domain($cdom,'description').'
'.
+ ''.&Apache::loncommon::messagewrapper(&mt('Send me a message'),$cnum,$cdom).'
'.&Apache::lonrss::advertisefeeds($cnum,$cdom));
} else {
- $r->print('\textbf{'.$Apache::lonnet::domaindescription{$cdom}.'}\\\\');
+ $r->print('\textbf{'.&Apache::lonnet::domain($cdom,'description').'}\\\\');
}
my %syllabus=&Apache::lonnet::dump('aboutme',$cdom,$cnum);
my $allowed=0;
@@ -122,7 +151,7 @@ sub handler {
$r->print(''.&mt('Privacy Note').': '.
&mt('The information you submit can be viewed by anybody who is logged into LON-CAPA. Do not provide information that you are not ready to share publicly.').
'
'.
- &Apache::loncommon::help_open_topic('Uploaded_Templates_TextBoxes','Help with filling in text boxes').'Show Public View'.
+ &Apache::loncommon::help_open_topic('Uploaded_Templates_TextBoxes','Help with filling in text boxes').'
'.&mt('Show Public View').''.
&Apache::loncommon::help_open_topic('Uploaded_Templates_PublicView').'
');
} elsif ($privleged && $target ne 'tex') {
my $query_string = &build_query_string({'forceedit' => '1',});
@@ -149,12 +178,12 @@ sub handler {
}
}
if (($allowed) && ($env{'form.storesyl'})) {
- foreach (keys %syllabusfields) {
- my $field=$env{'form.'.$_};
+ foreach my $syl_field (keys(%syllabusfields)) {
+ my $field=$env{'form.'.$syl_field};
$field=~s/\s+$//s;
$field=&Apache::lonfeedback::clear_out_html($field,
$env{'user.adv'});
- $syllabus{$_}=$field;
+ $syllabus{$syl_field}=$field;
}
$syllabus{'uploaded.lastmodified'}=time;
&Apache::lonnet::put('aboutme',\%syllabus,$cdom,$cnum);
@@ -178,18 +207,18 @@ sub handler {
if ($allowed) {
$r->print(
''.
'
';
$r->print($output);
- my $filecounts = &portfolio_files($r,'listfiles',\%lt);
- my $query_string = &build_query_string();
- $r->print('
'.
- &mt('Information about [_1]',$name).'');
+ my $filecounts = &portfolio_files($r,'listfiles',\%lt,$is_course,
+ $cdom,$cnum,$name);
+ if (!($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public')) {
+ my $query_string = &build_query_string();
+ $r->print('
');
+ if ($is_course) {
+ $r->print(&mt('Course Information page'));
+ } else {
+ $r->print(&mt('Information about [_1]',$name));
+ }
+ $r->print('');
+ }
return;
}
sub portfolio_files {
- my ($r,$mode,$lt) = @_;
- my ($cdom,$cnum,$name) = &aboutme_info($r);
+ my ($r,$mode,$lt,$is_course,$cdom,$cnum,$name) = @_;
my $filecounts = {
withpass => 0,
withoutpass => 0,
@@ -393,7 +488,6 @@ sub portfolio_files {
&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';
@@ -404,10 +498,63 @@ sub portfolio_files {
}
}
- 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 .= ''.$group.'
'.$grpout.'
';
+ }
+ }
+ } 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 '';
+ }
+ sub portfolio_row_start {
+ $count++;
+ my $class = ($count%2)?'LC_odd_row'
+ :'LC_even_row';
+ return '';
+ }
+}
+
+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_/)) {
@@ -425,7 +572,7 @@ sub portfolio_files {
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})) {
@@ -443,45 +590,26 @@ sub portfolio_files {
}
$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 .= '
';
- } 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 '';
- }
- sub portfolio_row_start {
- $count++;
- my $class = ($count%2)?'LC_odd_row'
- :'LC_even_row';
- return '';
}
+ 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);
@@ -493,10 +621,8 @@ sub parse_directory {
$output .= ' '.$title;
$output .= ' |
';
$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;
@@ -504,9 +630,14 @@ sub parse_directory {
$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');