--- loncom/interface/lonaboutme.pm 2006/08/02 20:18:10 1.45
+++ loncom/interface/lonaboutme.pm 2009/02/19 17:32:39 1.99
@@ -1,7 +1,7 @@
# The LearningOnline Network
-# "About Me" Personal Information
+# Personal Information Page
#
-# $Id: lonaboutme.pm,v 1.45 2006/08/02 20:18:10 albertel Exp $
+# $Id: lonaboutme.pm,v 1.99 2009/02/19 17:32:39 neumanie Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -26,6 +26,53 @@
# http://www.lon-capa.org/
#
+=pod
+
+=head1 NAME
+
+pache::lonaboutme
+
+=head1 SYNOPSIS
+
+(empty)
+
+This is part of the LearningOnline Network with CAPA project
+described at http://www.lon-capa.org.
+
+=head1 OVERVIEW
+
+(empty)
+
+
+=head1 SUBROUTINES
+
+=over
+
+=item handler()
+
+=item in_course()
+
+=item aboutme_info()
+
+=item print_portfiles_link()
+
+=item build_query_string()
+
+=item display_portfolio_header()
+
+=item display_portfolio_files()
+
+=item portfolio_files()
+
+=item build_hierarchy()
+
+=item parse_directory()
+
+=back
+
+=cut
+
+
package Apache::lonaboutme;
use strict;
@@ -37,6 +84,9 @@ use Apache::lonfeedback;
use Apache::lonrss();
use Apache::lonlocal;
use Apache::lonmsgdisplay();
+use Apache::lontemplate;
+use HTML::Entities();
+use Image::Magick;
sub handler {
my $r = shift;
@@ -48,36 +98,94 @@ sub handler {
if ($target eq 'tex') {
$r->print(&Apache::lonprintout::print_latex_header($env{'form.latex_type'}));
}
- my (undef,undef,$cdom,$cnum)=split(/\//,$r->uri);
+ 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);
+ }
+
+ my $candisplay = 1;
+ if (!$is_course) {
+ if ($action ne 'portfolio') {
+ $candisplay = &Apache::lonnet::usertools_access($cnum,$cdom,'aboutme');
+ if ((!$candisplay) && ($env{'request.course.id'})) {
+ $candisplay = &aboutme_access($cnum,$cdom);
+ }
+ if (!$candisplay) {
+ if ($target eq 'tex') {
+ $r->print('\noindent{\large\textbf{'.&mt('No user home page available').'}}\\\\\\\\');
+ } else {
+ $r->print(&Apache::loncommon::start_page("Personal Information Page"));
+ $r->print('
'.&mt('No user home page available') .' '.
+ &mt('This is a result of one of the following:').''.
+ ''.&mt('The administrator of this domain has disabled home page functionality for this specific user.').' '.
+ ''.&mt('The domain has been configured to disable, by default, home page functionality for all users in the domain.').' '.
+ ' ');
+ $r->print(&Apache::loncommon::end_page());
+ }
+ return OK;
+ }
+ }
}
+
# --------------------------------------------------------- The syllabus fields
my %syllabusfields=&Apache::lonlocal::texthash(
'aaa_contactinfo' => 'Contact Information',
- 'bbb_aboutme' => 'About Me',
+ 'bbb_aboutme' => 'Personal Information Page',
'ccc_webreferences' => 'Web References');
# ------------------------------------------------------------ Get Query String
- &Apache::loncommon::get_unprocessed_cgi
- ($ENV{'QUERY_STRING'},['forceedit','forcestudent','register','action']);
+ &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+ ['forceedit','forcestudent',
+ 'register','popup']);
# ----------------------------------------------- Available Portfolio file display
- if (($target ne 'tex') && ($env{'form.action'} eq 'portfolio')) {
- my %lt = &Apache::lonlocal::texthash (
- withoutpass => 'passphrase not required',
- withpass => 'passphrase protected',
- both => 'all access types ',
- );
- &display_portfolio_header($r);
- &display_portfolio_files($r,\%lt);
+ if (($target ne 'tex') && ($action eq 'portfolio')) {
+ &display_portfolio_header($r,$is_course);
+ if ((!$is_course) && (!&Apache::lonnet::usertools_access($cnum,$cdom,'portfolio'))) {
+ $r->print(''.&mt('No user portfolio available') .' '.
+ &mt('This is a result of one of the following:').''.
+ ''.&mt('The administrator of this domain has disabled portfolio functionality for this specific user.').' '.
+ ''.&mt('The domain has been configured to disable, by default, portfolio functionality for all users in the domain.').' '.
+ ' ');
+ } else {
+ 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 $brcrum = [{href=>"/adm/navmaps",text=>"Navigate Course Contents"},
+ {href=>"/adm/aboutme",text=>"Course Information"}];
+ my $start_page =
+ &Apache::loncommon::start_page(
+ "Course Information",
+ undef,
+ {'function' => $env{'forcestudent'},
+ 'domain' => $cdom,
+ 'force_register' => $env{'forceregister'},
+ 'bread_crumbs' => $brcrum});
+ $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'; };
@@ -90,14 +198,19 @@ 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 $args = {'function' => $forcestudent,
+ 'domain' => $cdom,
+ 'force_register' => $forceregister};
+ if ($env{'form.popup'}) {
+ $args->{'no_nav_bar'} = 1;
+ }
+ $args->{'bread_crumbs'} = [{href=>"/adm/fhwfdev/$cnum/aboutme",text=>"Personal Information Page"}];
my $start_page =
- &Apache::loncommon::start_page("Personal Information",undef,
- {'function' => $forcestudent,
- 'domain' => $cdom,
- 'force_register' =>
- $forceregister,});
+ &Apache::loncommon::start_page("Personal Information Page",$rss_link,$args);
$r->print($start_page);
- $r->print(''.&Apache::loncommon::plainname($cnum,$cdom).' ');
+ $r->print('');
+ $r->print('
'.&Apache::loncommon::plainname($cnum,$cdom).' ');
} else {
$r->print('\noindent{\large\textbf{'.&Apache::loncommon::plainname($cnum,$cdom).'}}\\\\\\\\');
}
@@ -107,10 +220,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('
');
+ $r->print(''.&Apache::lonnet::domain($cdom,'description').' ');#OLD SendMessage POS
} 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;
@@ -120,19 +233,15 @@ sub handler {
my $privleged=$allowed=(($env{'user.name'} eq $cnum) &&
($env{'user.domain'} eq $cdom));
if ($forcestudent or $target eq 'tex') { $allowed=0; }
-
+ my $query_string;
+
if ($allowed) {
- my $query_string = &build_query_string({'forcestudent' => '1',});
+
$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_PublicView').'
');
- } elsif ($privleged && $target ne 'tex') {
- my $query_string = &build_query_string({'forceedit' => '1',});
- $r->print(''.
- &mt('Edit').'
');
- }
+ &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',&mt('Help with filling in text boxes')).'
');
+ }
+
if (($env{'form.uploaddoc.filename'}) &&
($env{'form.storeupl'}) && ($allowed)) {
if ($env{'form.uploaddoc.filename'}=~/\.(gif|jpg|png|jpeg)$/i) {
@@ -140,7 +249,7 @@ sub handler {
&Apache::lonnet::removeuploadedurl($syllabus{'uploaded.photourl'});
}
$syllabus{'uploaded.photourl'}=
- &Apache::lonnet::userfileupload('uploaddoc',undef,'aboutme');
+ &Apache::lonnet::userphotoupload('uploaddoc','aboutme');
}
$syllabus{'uploaded.lastmodified'}=time;
&Apache::lonnet::put('aboutme',\%syllabus,$cdom,$cnum);
@@ -153,142 +262,231 @@ 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);
}
+my $lastmod;
+my $image;
# ---------------------------------------------------------------- Get syllabus
if (($syllabus{'uploaded.lastmodified'}) || ($allowed)) {
- my $lastmod=$syllabus{'uploaded.lastmodified'};
+ $lastmod=$syllabus{'uploaded.lastmodified'};
$lastmod=($lastmod?&Apache::lonlocal::locallocaltime($lastmod):&mt('never'));
- $r->print(&mt('Last updated').': '.$lastmod);
+ $r->print(' '.&mt('Last updated').': '.$lastmod);
+
+
if ($syllabus{'uploaded.photourl'}) {
&Apache::lonnet::allowuploaded('/adm/aboutme',
$syllabus{'uploaded.photourl'});
- my $image=
- qq{ };
+
+ #This call is to resize all "Personal Information" images in the LonCapa System. When its done, you can remove this line.
+ &Apache::lonnet::resizeImage(&Apache::lonnet::filelocation('',$syllabus{'uploaded.photourl'}));
+ #---End Resize---
+
+ $image=qq{ };
+
if ($target eq 'tex') {
$image=&Apache::lonxml::xmlparse($r,'tex',$image);
}
- $r->print($image);
+
}
+ if( $target ne 'tex'){
+ &Apache::lontemplate::print_start_page_functions($r);
+ if($allowed){
+ $query_string = &build_query_string({'forcestudent' => '1','popup' => $env{'form.popup'}});
+ &Apache::lontemplate::print_functions_content($r,''.&mt('Show Public View').' '.&Apache::loncommon::help_open_topic('Uploaded_Templates_PublicView'));
+ }elsif($privleged){
+ $query_string = &build_query_string({'forceedit' => '1','popup' => $env{'form.popup'}});
+ &Apache::lontemplate::print_functions_content($r,''. &mt('Edit').' ');
+ }
+ &Apache::lontemplate::print_functions_content($r,&Apache::lontemplate::send_message($r,$cnum,$cdom));
+ &Apache::lontemplate::print_end_page_functions($r);
+ }
if ($allowed) {
$r->print(
- ''.
'
+');
}
- foreach (sort keys %syllabusfields) {
- if (($syllabus{$_}) || ($allowed)) {
- my $message=$syllabus{$_};
- &Apache::lonfeedback::newline_to_br(\$message);
- $message
- =~s/(http\:\/\/[^\s]+)/\\$1\<\/tt\>\<\/a\>/g;
- if ($allowed) {
- $message=&Apache::lonspeller::markeduptext($message);
- }
- $message=&Apache::lontexconvert::msgtexconverted($message);
- if ($target ne 'tex') {
- $r->print(''.$syllabusfields{$_}.' '.
- $message.' ');
- } else {
- $r->print('\\\\\textbf{'.$syllabusfields{$_}.'}\\\\'.
- &Apache::lonxml::xmlparse($r,'tex',$message).'\\\\');
- }
- if ($allowed) {
- $r->print(' ');
- }
- }
- }
+
+ if($allowed) {
+ $r->print('
');
+ $r->print('
');
if ($allowed) {
+ if ($env{'form.popup'}) {
+ $r->print(' ');
+ }
$r->print('');
}
- if ($target ne 'tex') {$r->print('');} else {$r->print('\\\\');}
+ if ($target ne 'tex') {$r->print(' ');} else {$r->print('\\\\');}
} else {
+ # &Apache::lontemplate::send_message($r,$cnum,$cdom);
$r->print(''.&mt('No personal information provided').'.
');
}
+
- if ($target ne 'tex') {
- &print_portfiles_link($r);
- }
-
- if ($env{'request.course.id'}) {
- if (&Apache::lonnet::allowed('srm',$env{'request.course.id'})) {
- if ($target ne 'tex') {
- $r->print(' ');
- $r->print(''.
- &mt('User Notes, Records of Face-To-Face Discussions, and Critical Messages in Course').' '.
- &mt('Shared by course faculty and staff').
- &Apache::loncommon::help_open_topic("Course_Face_To_Face_Records,Course_Critical_Message").
-' ');
- &Apache::lonmsgdisplay::disfacetoface($r,$cnum,$cdom);
- $r->print(' ');
- if (&Apache::lonnet::allowed('vsa',
- $env{'request.course.id'}) ||
- &Apache::lonnet::allowed('vsa',
- $env{'request.course.id'}.'/'.
- $env{'request.course.sec'})) {
- $r->print(&Apache::loncommon::track_student_link
- ('View recent activity by this student',
- $cnum,$cdom).(' 'x2));
- }
- $r->print(&Apache::loncommon::noteswrapper('Add Records',$cnum,$cdom));
- } else {
- $r->print('\\\\\textbf{'.&mt('User Notes, Records of Face-To-Face Discussions, and Critical Messages in Course').'}\\\\'.&mt('Shared by course faculty and staff').'\\\\\\\\');
- &Apache::lonmsgdisplay::disfacetoface($r,$cnum,$cdom);
+ if ($env{'request.course.id'}
+ && &Apache::lonnet::allowed('srm',$env{'request.course.id'})
+ && &in_course($cdom,$cnum)) {
+ if ($target ne 'tex') {
+ $r->print(' ');
+ $r->print(''.
+ &mt('User Notes, Records of Face-To-Face Discussions, and Critical Messages in Course').' '.
+ &mt('Shared by course faculty and staff').
+ &Apache::loncommon::help_open_topic("Course_Face_To_Face_Records,Course_Critical_Message").
+ ' ');
+ &Apache::lonmsgdisplay::disfacetoface($r,$cnum,$cdom);
+ $r->print(' ');
+ if (&Apache::lonnet::allowed('vsa',
+ $env{'request.course.id'}) ||
+ &Apache::lonnet::allowed('vsa',
+ $env{'request.course.id'}.'/'.
+ $env{'request.course.sec'})) {
+ $r->print(&Apache::loncommon::track_student_link
+ ('View recent activity by this student',
+ $cnum,$cdom).(' 'x2));
}
- }
+ $r->print(&Apache::loncommon::noteswrapper(&mt('Add Records'),$cnum,$cdom));
+ } else {
+ $r->print('\\\\\textbf{'.&mt('User Notes, Records of Face-To-Face Discussions, and Critical Messages in Course').'}\\\\'.&mt('Shared by course faculty and staff').'\\\\\\\\');
+ &Apache::lonmsgdisplay::disfacetoface($r,$cnum,$cdom);
+ }
}
if ($target ne 'tex') {
+ if ($env{'form.popup'}) {
+ $r->print(''.&mt('Close window').' ');
+ }
$r->print(&Apache::loncommon::end_page());
} else {
$r->print('\end{document}');
}
+
+
+
return OK;
}
+sub in_course {
+ my ($udom,$uname,$cdom,$cnum,$type) = @_;
+ $type ||= 'any';
+ if (!defined($cdom) || !defined($cnum)) {
+ my $cid = $env{'request.course.id'};
+ $cdom = $env{'course.'.$cid.'.domain'};
+ $cnum = $env{'course.'.$cid.'.num'};
+ }
+ my %roles = &Apache::lonnet::dump('roles',$udom,$uname);
+ my @course_roles = grep(m{^/\Q$cdom\E/\Q$cnum\E[/_]}, keys(%roles));
+ return 0 if (!@course_roles);
+ return 1 if ($type eq 'any');
+ my $now = time();
+ foreach my $role (@course_roles) {
+ my (undef,$role_end,$role_start)=split(/\_/,$roles{$role});
+ my $status = 'active';
+ if ($role_start > 0 && $now < $role_start) {
+ $status = 'future';
+ }
+ if ($role_end > 0 && $now > $role_end) {
+ $status = 'previous';
+ }
+ return 1 if ($status eq $type);
+ }
+ return 0;
+}
+
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 $query_string = &build_query_string({'action' => 'portfolio',});
+ my ($r,$is_course) = @_;
+ my ($cdom,$cnum,$name) = &aboutme_info($r,$is_course);
+ my $filecounts = &portfolio_files($r,'showlink',undef,$is_course,
+ $cdom,$cnum,$name);
+ 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('
Viewable portfolio files ');
- $output .= ''.&mt('Display file listing').
+ $output = '';
+ $output .= ($is_course?$lt{'vgpf'}:$lt{'vpfi'}).' ';
+
+ #$output = '
'.($is_course?$lt{'vgpf'}:$lt{'vpfi'}).' ';
+ $output .= '
'.$lt{'difl'}.
' ';
- $output .= &mt('A total of [quant,_1,portfolio file] owned by [_2] are available.',$filecounts->{'both'},$name).'
';
+ if ($filecounts->{'both'} == 1) {
+ if ($is_course) {
+ $output .= &mt('One group portfolio file is available.').'';
+ } else {
+ $output .= &mt('One portfolio file owned by [_1] is available.',$name).'';
+ }
+ } else {
+ if ($is_course) {
+ $output .= &mt('A total of [_1] group portfolio files are available.',$filecounts->{'both'}).'';
+ } else {
+ $output .= &mt('A total of [_1] portfolio files owned by [_2] are available.',$filecounts->{'both'},$name).'';
+ }
+ }
if ($filecounts->{'withoutpass'}) {
- $output .= ''.&mt('[quant,_1,file] are publicly accessible.',$filecounts->{'withoutpass'}).' ';
+ $output .= ''.&mt('[quant,_1,file is,files are] publicly accessible.',$filecounts->{'withoutpass'}).' ';
}
if ($filecounts->{'withpass'}) {
- $output .= ''.&mt('[quant,_1,file] require a passphrase for access.',$filecounts->{'withpass'}).' ';
+ $output .= ''.&mt('[quant,_1,file requires,files require] a passphrase for access.',$filecounts->{'withpass'}).' ';
}
$output .= ' ';
+ $output .='';
+ $output .=' ';
}
$r->print($output);
return;
@@ -298,9 +496,9 @@ sub build_query_string {
my ($new_items) = @_;
my $query_string;
my @formelements = ('register');
- my $nonew = 1;
+ my $new = 0;
if (ref($new_items) eq 'HASH') {
- $nonew = 0;
+ $new = 1;
if (!defined($new_items->{'forceedit'}) &&
!defined($new_items->{'forcestudent'})) {
push(@formelements,('forceedit','forcestudent'));
@@ -310,12 +508,12 @@ sub build_query_string {
}
foreach my $element (@formelements) {
if (exists($env{'form.'.$element})) {
- if (($nonew) || (!defined($new_items->{$element}))) {
+ if ((!$new) || (!defined($new_items->{$element}))) {
$query_string .= '&'.$element.'='.$env{'form.'.$element};
}
}
}
- if (!$nonew) {
+ if ($new) {
foreach my $key (keys(%{$new_items})) {
$query_string .= '&'.$key.'='.$new_items->{$key};
}
@@ -325,37 +523,54 @@ sub build_query_string {
}
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,});
+ $output .= ''.&mt('Group Portfolio files').' ';
+ } else {
+ $output =
+ &Apache::loncommon::start_page('Viewable portfolio files',undef,
+ {'function' => $forcestudent,
'domain' => $cdom,});
- &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?action=portfolio",
- text=>"Viewable files - $name",
- title=>"Viewable portfolio files for $name"}
-);
- $output .= &Apache::lonhtmlcommon::breadcrumbs(&mt('Viewable portfolio files.'));
- $output .= ''.&mt('Portfolio files for [_1]',$name).' ';
+ 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 Page - $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 .= ''.&mt('Portfolio files for [_1]',$name).' ';
+ }
$r->print($output);
return;
}
sub display_portfolio_files {
- my ($r,$lt) = @_;
- 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 ',);
+ %lt = &Apache::lonlocal::texthash(%lt);
+
my $portaccess = 'withoutpass';
if (exists($env{'form.portaccess'})) {
$portaccess = $env{'form.portaccess'};
}
+
my $output = ' ';
$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 +613,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 +623,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 +697,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,65 +715,104 @@ 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) = @_;
- 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,
+ $group);
+ my $getpropath = 1;
+ my %dirlist = map {
+ ((split('&',$_,2))[0],1)
+ } &Apache::lonnet::dirlist($portfolio_root.$path,$cdom,$cnum,$getpropath);
foreach my $item (sort(keys(%{$currhash}))) {
$output .= &portfolio_row_start();
$output .= '';
if (ref($currhash->{$item}) eq 'HASH') {
my $title=&HTML::Entities::encode($item,'<>&"');
$output .= ' '.$title;
- $output .= ' ';
- $output .= &parse_directory($r,$depth,$currhash->{$item});
+ $output .= ' ';
+ $output .= &parse_directory($r,$depth,$currhash->{$item},
+ $path.'/'.$item,$is_course,$group);
} else {
- my $showname;
- if ($currhash->{$item} =~ m|/([^/]+)$|) {
- $showname = $1;
- } else {
- $showname = $currhash->{$item};
+ my $file_name;
+ if ($currhash->{$item} =~ m|/([^/]+)$|) {
+ $file_name = $1;
+ } else {
+ $file_name = $currhash->{$item};
+ }
+ my $have_meta = exists($dirlist{$file_name.'.meta'});
+ 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');
+ }
+ if ($showname eq '') {
+ $showname = $file_name;
+ } else {
+ $showname = $file_name.' ('.$showname.')';
+ }
+
$showname=&HTML::Entities::encode($showname,'<>&"');
- $output .= ' '.$showname.' ';
+ $output .= ''.
+ ' '.
+ ' '.$showname.' ';
+ $output.='';
+ if ($have_meta) {
+ $output.= ' ';
+ }
$output .= ' ';
}
}
return $output;
}
+sub aboutme_access {
+ my ($uname,$udom) = @_;
+ my $privcheck = $env{'request.course.id'};
+ my $sec;
+ if ($env{'request.course.sec'} ne '') {
+ $sec = $env{'request.course.sec'};
+ $privcheck .= '/'.$sec;
+ }
+ my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ if (($cdom eq '') || ($cnum eq '')) {
+ my %coursehash = &coursedescription($env{'request.course.id'});
+ $cdom = $coursehash{'domain'};
+ $cnum = $coursehash{'cnum'};
+ }
+ if ((&Apache::lonnet::allowed('srm',$privcheck)) ||
+ (&Apache::lonnet::allowed('dff',$privcheck))) {
+ if (&in_course($uname,$udom,$cnum,$cdom)) {
+ return 1;
+ }
+ }
+ return;
+}
+
1;
__END__
500 Internal Server Error
Internal Server Error
The server encountered an internal error or
misconfiguration and was unable to complete
your request.
Please contact the server administrator at
root@localhost to inform them of the time this error occurred,
and the actions you performed just before this error.
More information about this error may be available
in the server error log.