--- loncom/interface/lonaboutme.pm 2008/09/11 02:07:27 1.70
+++ loncom/interface/lonaboutme.pm 2010/02/21 06:21:50 1.143
@@ -1,7 +1,7 @@
# The LearningOnline Network
-# "About Me" Personal Information
+# Personal Information Page
#
-# $Id: lonaboutme.pm,v 1.70 2008/09/11 02:07:27 raeburn Exp $
+# $Id: lonaboutme.pm,v 1.143 2010/02/21 06:21:50 raeburn 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,7 +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;
@@ -47,39 +96,71 @@ sub handler {
my $target=$env{'form.grade_target'};
# ------------------------------------------------------------ Print the screen
if ($target eq 'tex') {
- $r->print(&Apache::lonprintout::print_latex_header($env{'form.latex_type'}));
+ $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');
+ &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 personal information page available').'}}\\\\\\\\');
+ } else {
+ $r->print(&Apache::loncommon::start_page("Personal Information Page"));
+ $r->print('
'.&mt('No user personal information page available') .' '.
+ &mt('This is a result of one of the following:').''.
+ ''.&mt('The administrator of this domain has disabled personal information page functionality for this specific user.').' '.
+ ''.&mt('The domain has been configured to disable, by default, personal information 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',
'ccc_webreferences' => 'Web References');
# ------------------------------------------------------------ Get Query String
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['forceedit','forcestudent',
- 'register','popup']);
+ ['forceedit','forcestudent',
+ 'register','popup']);
-# ----------------------------------------------- Available Portfolio file display
+# ----------------------------------------------- Available Portfolio file display
if (($target ne 'tex') && ($action eq 'portfolio')) {
&display_portfolio_header($r,$is_course);
- my ($blocked,$blocktext) =
- &Apache::loncommon::blocking_status('port',$cnum,$cdom);
- if (!$blocked) {
- &display_portfolio_files($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 {
- $r->print($blocktext);
+ 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;
@@ -87,15 +168,18 @@ sub handler {
if ($is_course) {
if ($target ne 'tex') {
+ my $brcrum = [{href=>"/adm/navmaps",text=>"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'},});
+ 'force_register' => $env{'forceregister'},
+ 'bread_crumbs' => $brcrum});
$r->print($start_page);
- $r->print(''.&mt('Group files').' ');
+ $r->print(''.&mt('Group Portfolio').' ');
&print_portfiles_link($r,$is_course);
$r->print(&Apache::loncommon::end_page());
}
@@ -110,191 +194,257 @@ sub handler {
if ($forcestudent eq '') {
$forceregister = $env{'form.register'};
}
-
-# --------------------------------------- There is such a user, get environment
+
+#------------Get rights
my %courseenv=&Apache::lonnet::dump('environment',$cdom,$cnum);
+ my %syllabus=&Apache::lonnet::dump('aboutme',$cdom,$cnum);
+ my $allowed=0;
+ my $privleged=$allowed=(($env{'user.name'} eq $cnum) &&
+ ($env{'user.domain'} eq $cdom));
+ if ($forcestudent or $target eq 'tex') { $allowed=0; }
+
+# --------------------------------------- There is such a user, get environment
+
if ($target ne 'tex') {
- my $rss_link = &Apache::lonrss::rss_link($cnum,$cdom);
- my $args = {'function' => $forcestudent,
+ my $rss_link = &Apache::lonrss::rss_link($cnum,$cdom);
+ my $args = {'function' => undef,
'domain' => $cdom,
- 'force_register' => $forceregister};
+# if this page is part of course content it looses the menu line when switching from Edit Mode to Public Mode. To avoid
+#this, I take take the value of the environment Variable $env{form.register}
+# 'force_register' => $forceregister};
+ 'force_register' => $env{'form.register'}};
+
if ($env{'form.popup'}) {
$args->{'no_nav_bar'} = 1;
+ #Don't show breadcrumbs twice, when this page is part of course content and you call it
+ } elsif ($env{'form.register'}) {
+ #do nothing
+ } else { # Don't show breadcrumbs in popup window
+ $args->{'bread_crumbs'} = [{href=>"/adm/$cdom/$cnum/aboutme",text=>"Personal Information Page"}];
+ }
+ my $start_page = &Apache::loncommon::start_page('Personal Information Page',$rss_link,$args);
+ $r->print($start_page);
+ }
+
+#----------------Print Functions
+ if ($target ne 'tex') {
+ my $functions=&Apache::lonhtmlcommon::start_funclist();
+ if ($allowed) {
+ my $query_string = &build_query_string(
+ {'forcestudent' => '1',
+ 'popup' => $env{'form.popup'}});
+ $functions.=&Apache::lonhtmlcommon::add_item_funclist(
+ ''
+ .&mt('Show Public View').' '
+ .&Apache::loncommon::help_open_topic(
+ 'Uploaded_Templates_PublicView'));
+ } elsif ($privleged) {
+ my $query_string = &build_query_string(
+ {'forceedit' => '1',
+ 'popup' => $env{'form.popup'}});
+ $functions.=&Apache::lonhtmlcommon::add_item_funclist(
+ ''
+ .&mt('Edit').' ');
+ }
+ $functions.=&Apache::lonhtmlcommon::add_item_funclist(
+ &Apache::lontemplate::send_message($r,$cnum,$cdom));
+
+ if ($env{'request.course.id'} &&
+ &Apache::lonnet::allowed('srm',$env{'request.course.id'}) &&
+ &in_course($cdom,$cnum)) {
+ if (&Apache::lonnet::allowed('vsa', $env{'request.course.id'}) ||
+ &Apache::lonnet::allowed('vsa', $env{'request.course.id'}.'/'.$env{'request.course.sec'})) {
+ $functions.=&Apache::lonhtmlcommon::add_item_funclist(
+ &Apache::loncommon::track_student_link(
+ 'View recent activity by this student',$cnum,$cdom));
+ }
+ if (&Apache::lonnet::allowed('vgr', $env{'request.course.id'}) ||
+ &Apache::lonnet::allowed('vgr', $env{'request.course.id'}.'/'.$env{'request.course.sec'})) {
+ $functions.=&Apache::lonhtmlcommon::add_item_funclist(
+ &Apache::loncommon::slot_reservations_link(
+ 'Slot reservation history',$cnum,$cdom));
+ }
+ $functions.=&Apache::lonhtmlcommon::add_item_funclist(
+ &Apache::loncommon::noteswrapper(
+ &mt('Add Records'),$cnum,$cdom));
}
- my $start_page =
- &Apache::loncommon::start_page("Personal Information",$rss_link,$args);
- $r->print($start_page);
- $r->print(''.&Apache::loncommon::plainname($cnum,$cdom).' ');
- } else {
- $r->print('\noindent{\large\textbf{'.&Apache::loncommon::plainname($cnum,$cdom).'}}\\\\\\\\');
+ $functions.=&Apache::lonhtmlcommon::end_funclist();
+ $r->print(&Apache::loncommon::head_subbox($functions));
}
- if ($courseenv{'nickname'}) {
- $r->print(
- '"'.$courseenv{'nickname'}.
- '" ');
+
+# Print Privacy Note
+ if ($target ne 'tex') {
+ #Print Privacy Note
+ if ($allowed) {
+ $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.')
+ .'
'
+ );
+ }
}
+
+#Print last modified
+
if ($target ne 'tex') {
- $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::domain($cdom,'description').'}\\\\');
+ my $lastmod;
+ if (($syllabus{'uploaded.lastmodified'}) || ($allowed)) {
+ $lastmod=$syllabus{'uploaded.lastmodified'};
+ $lastmod=($lastmod?&Apache::lonlocal::locallocaltime($lastmod):&mt('never'));
+ $r->print('');
+ $r->print(&mt('Last updated').': '.$lastmod . '');
+ $r->print('
');
+ }
+ }
+#Print Help Text
+ if ($target ne 'tex') {
+ if($allowed){
+ $r->print(&Apache::loncommon::help_open_topic('Uploaded_Templates_TextBoxes',&mt('Help with filling in text boxes')));
+ }
}
- my %syllabus=&Apache::lonnet::dump('aboutme',$cdom,$cnum);
- my $allowed=0;
+#------Print Headtitle
+ if ($target ne 'tex') {
+ $r->print('');
+ $r->print('
'.&Apache::loncommon::plainname($cnum,$cdom).' ');
+ if ($courseenv{'nickname'}) {
+ $r->print('
"'.$courseenv{'nickname'}.'" ');
+ }
+ $r->print('
'.&Apache::lonnet::domain($cdom,'description').' ');
+ } else {
+ $r->print('\noindent{\large\textbf{'.&Apache::loncommon::plainname($cnum,$cdom).'}}\\\\\\\\');
+ $r->print('\textbf{'.&Apache::lonnet::domain($cdom,'description').'}\\\\');
+ }
# does this user have privileges to post, etc?
- my $privleged=$allowed=(($env{'user.name'} eq $cnum) &&
- ($env{'user.domain'} eq $cdom));
- if ($forcestudent or $target eq 'tex') { $allowed=0; }
-
- if ($allowed) {
- my $query_string = &build_query_string({'forcestudent' => '1','popup' => $env{'form.popup'}});
- $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',&mt('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','popup' => $env{'form.popup'}});
- $r->print('
'.
- &mt('Edit').'
');
- }
- if (($env{'form.uploaddoc.filename'}) &&
+
+ my $query_string;
+
+ if (($env{'form.uploaddoc.filename'}) &&
($env{'form.storeupl'}) && ($allowed)) {
- if ($env{'form.uploaddoc.filename'}=~/\.(gif|jpg|png|jpeg)$/i) {
- if ($syllabus{'uploaded.photourl'}) {
- &Apache::lonnet::removeuploadedurl($syllabus{'uploaded.photourl'});
- }
- $syllabus{'uploaded.photourl'}=
- &Apache::lonnet::userfileupload('uploaddoc',undef,'aboutme');
- }
- $syllabus{'uploaded.lastmodified'}=time;
- &Apache::lonnet::put('aboutme',\%syllabus,$cdom,$cnum);
- }
+ if ($env{'form.uploaddoc.filename'}=~/\.(gif|jpg|png|jpeg)$/i) {
+ if ($syllabus{'uploaded.photourl'}) {
+ &Apache::lonnet::removeuploadedurl($syllabus{'uploaded.photourl'});
+ }
+ $syllabus{'uploaded.photourl'}=
+ &Apache::lonnet::userfileupload('uploaddoc',undef,'aboutme',
+ undef,undef,undef,undef,undef,undef,undef,'400','500');
+ }
+ $syllabus{'uploaded.lastmodified'}=time;
+ &Apache::lonnet::put('aboutme',\%syllabus,$cdom,$cnum);
+ }
if ($allowed && $env{'form.delupl'}) {
- if ($syllabus{'uploaded.photourl'}) {
- &Apache::lonnet::removeuploadedurl($syllabus{'uploaded.photourl'});
- delete($syllabus{'uploaded.photourl'});
- &Apache::lonnet::del('aboutme',['uploaded.photourl'],$cdom,$cnum);
- }
- }
- if (($allowed) && ($env{'form.storesyl'})) {
- 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{$syl_field}=$field;
- }
- $syllabus{'uploaded.lastmodified'}=time;
- &Apache::lonnet::put('aboutme',\%syllabus,$cdom,$cnum);
- }
+ if ($syllabus{'uploaded.photourl'}) {
+ &Apache::lonnet::removeuploadedurl($syllabus{'uploaded.photourl'});
+ delete($syllabus{'uploaded.photourl'});
+ &Apache::lonnet::del('aboutme',['uploaded.photourl'],$cdom,$cnum);
+ }
+ }
+ if (($allowed) && ($env{'form.storesyl'})) {
+ 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{$syl_field}=$field;
+ }
+ $syllabus{'uploaded.lastmodified'}=time;
+ &Apache::lonnet::put('aboutme',\%syllabus,$cdom,$cnum);
+ }
+ my $image;
# ---------------------------------------------------------------- Get syllabus
if (($syllabus{'uploaded.lastmodified'}) || ($allowed)) {
- my $lastmod=$syllabus{'uploaded.lastmodified'};
- $lastmod=($lastmod?&Apache::lonlocal::locallocaltime($lastmod):&mt('never'));
- $r->print(&mt('Last updated').': '.$lastmod);
- if ($syllabus{'uploaded.photourl'}) {
- &Apache::lonnet::allowuploaded('/adm/aboutme',
- $syllabus{'uploaded.photourl'});
- my $image=
- qq{
};
- if ($target eq 'tex') {
- $image=&Apache::lonxml::xmlparse($r,'tex',$image);
- }
- $r->print($image);
- }
- if ($allowed) {
- $r->print(
- '
'.
- '
');
- }
- if ($target ne 'tex') {$r->print('
');} else {$r->print('\\\\');}
- } else {
- $r->print('
'.&mt('No personal information provided').'.
');
- }
+ if ($syllabus{'uploaded.photourl'}) {
+ &Apache::lonnet::allowuploaded('/adm/aboutme',$syllabus{'uploaded.photourl'});
- if ($target ne 'tex') {
- &print_portfiles_link($r,$is_course);
+ $image=qq|
|;
+
+ if ($target eq 'tex') {
+ $image=&Apache::lonxml::xmlparse($r,'tex',$image);
+ }
+ }
+
+ if ($allowed) {
+ $r->print(
+ '
'.
+ ''.&mt('Upload a Photo').' '.
+ ''.
+ &mt('LON-CAPA will automatically scale your uploaded file so the image will not exceed a width of 400px and a height of 500px.').'
'.
+ ' '.
+ ' '.
+ ' '.
+ ' ');
+ if ($syllabus{'uploaded.photourl'}) {
+ $r->print('
')
+ }
+ $r->print('
');
+ }
+
+ if($allowed) {
+ $r->print('
');
+ }
+
+ if ($target ne 'tex') { #print Image
+ $r->print($image);
+
+ } #End Print Image
+
+ #Print Content eg. Contactinfo aboutme,...
+ &Apache::lontemplate::print_aboutme_content_template($r,$allowed,$target,\%syllabusfields,\%syllabus);
+ #End Print Content
+
+ if ($target ne 'tex') { #Begin Print RSS and portfiles
+ &print_portfiles_link($r,$is_course);
+ if (&Apache::lonrss::advertisefeeds($cnum,$cdom) ne '') {
+ &Apache::lontemplate::print_start_template($r,'RSS Feeds and Blogs','LC_Box');
+ $r->print(&Apache::lonrss::advertisefeeds($cnum,$cdom));
+ &Apache::lontemplate::print_end_template($r);
+ }
+
+ } #End Print RSS and portfiles
+
+
+ if ($allowed) {
+ if ($env{'form.popup'}) {
+ $r->print(' ');
+ }
+ $r->print(' ');
+ }
+ if ($target ne 'tex') {$r->print('
');} else {$r->print('\\\\');}
+ } else {
+ $r->print('
'.&mt('No personal information provided').'.
');
}
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('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);
- }
+ && &Apache::lonnet::allowed('srm',$env{'request.course.id'})
+ && &in_course($cdom,$cnum)) {
+ if ($target ne 'tex') {
+ $r->print('
');
+ &Apache::lontemplate::print_start_template($r,&mt('User Notes, Records of Face-To-Face Discussions, and Critical Messages in Course'),'LC_Box');
+ $r->print('
');
+ $r->print(&mt('Shared by course faculty and staff').&Apache::loncommon::help_open_topic("Course_Face_To_Face_Records,Course_Critical_Message"));
+ $r->print(' ');
+ &Apache::lonmsgdisplay::disfacetoface($r,$cnum,$cdom);
+ &Apache::lontemplate::print_end_template($r);
+
+ } 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, 'tex');
+ }
}
if ($target ne 'tex') {
+ $r->print('
');
if ($env{'form.popup'}) {
$r->print(''.&mt('Close window').' ');
}
- $r->print(&Apache::loncommon::end_page());
+ $r->print(&Apache::loncommon::end_page());
} else {
- $r->print('\end{document}');
+ $r->print('\end{document}');
}
+
+
+
return OK;
}
@@ -302,9 +452,9 @@ 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 $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));
@@ -312,15 +462,15 @@ sub in_course {
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);
+ 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;
}
@@ -343,15 +493,18 @@ sub print_portfiles_link {
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',
- );
+ 'vpfi' => 'Viewable portfolio files',
+ 'vgpf' => 'Viewable group portfolio files',
+ 'difl' => 'Display file listing',
+ );
if ($filecounts->{'both'} > 0) {
- $output = '
'.($is_course?$lt{'vgpf'}:$lt{'vpfi'}).' ';
+ $output = '';
+ $output .= ($is_course?$lt{'vgpf'}:$lt{'vpfi'}).' ';
+
+ #$output = '
'.($is_course?$lt{'vgpf'}:$lt{'vpfi'}).' ';
$output .= '
'.$lt{'difl'}.
- ' ';
+ $query_string.'">'.$lt{'difl'}.
+ '
';
if ($filecounts->{'both'} == 1) {
if ($is_course) {
$output .= &mt('One group portfolio file is available.').'
';
@@ -366,12 +519,13 @@ sub print_portfiles_link {
}
}
if ($filecounts->{'withoutpass'}) {
- $output .= ''.&mt('[quant,_1,file is,files 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 requires,files require] a passphrase for access.',$filecounts->{'withpass'}).' ';
+ $output .= ''.&mt('[quant,_1,file requires,files require] a passphrase for access.',$filecounts->{'withpass'}).' ';
}
$output .= ' ';
+ $output .= '
';
}
$r->print($output);
return;
@@ -380,11 +534,11 @@ sub print_portfiles_link {
sub build_query_string {
my ($new_items) = @_;
my $query_string;
- my @formelements = ('register');
+ my @formelements = ('register');
my $new = 0;
if (ref($new_items) eq 'HASH') {
$new = 1;
- if (!defined($new_items->{'forceedit'}) &&
+ if (!defined($new_items->{'forceedit'}) &&
!defined($new_items->{'forcestudent'})) {
push(@formelements,('forceedit','forcestudent'));
}
@@ -417,7 +571,7 @@ sub display_portfolio_header {
my $output;
if ($is_course) {
- $output =
+ $output =
&Apache::loncommon::start_page('Viewable group portfolio files',undef,
{'function' => $forcestudent,
'domain' => $cdom,});
@@ -430,10 +584,11 @@ sub display_portfolio_header {
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"}
+ text=>&mt('Personal Information Page - [_1]',$name),
+ title=>&mt('Go to personal information page for [_1]', $name)},
+ {href=>"/adm/$cdom/$cnum/aboutme/portfolio",
+ text=>&mt('Viewable files - [_1]', $name),
+ title=>&mt('Viewable portfolio files for [_1]', $name)}
);
$output .= &Apache::lonhtmlcommon::breadcrumbs(&mt('Viewable portfolio files.'));
}
@@ -446,10 +601,11 @@ sub display_portfolio_header {
sub display_portfolio_files {
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 %lt = &Apache::lonlocal::texthash(
+ 'withoutpass' => 'passphrase not required',
+ 'withpass' => 'passphrase protected',
+ 'both' => 'all access types ',
+ );
my $portaccess = 'withoutpass';
if (exists($env{'form.portaccess'})) {
@@ -457,8 +613,8 @@ sub display_portfolio_files {
}
my $output = ''.
- &mt('File access type: ').'';
+ .'" name="displaystatus" method="post">'.
+ &mt('File access type: ').'';
foreach my $type ('withoutpass','withpass','both') {
$output .= '';
}
$output .= ' '."\n".
- ' ';
+ ' ';
$output .= ' ';
$r->print($output);
my $filecounts = &portfolio_files($r,'listfiles',\%lt,$is_course,
@@ -495,9 +651,9 @@ sub portfolio_files {
both => 0,
};
my $current_permissions =
- &Apache::lonnet::get_portfile_permissions($cdom,$cnum);
- my %access_controls =
- &Apache::lonnet::get_access_controls($current_permissions);
+ &Apache::lonnet::get_portfile_permissions($cdom,$cnum);
+ my %access_controls =
+ &Apache::lonnet::get_access_controls($current_permissions);
my $portaccess;
if ($mode eq 'showlink') {
$portaccess = 'both';
@@ -513,7 +669,7 @@ sub portfolio_files {
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};
+ $files_by_group{$group}{$path} = $access_controls{$filename};
}
foreach my $group (sort(keys(%files_by_group))) {
my %fileshash;
@@ -537,7 +693,7 @@ sub portfolio_files {
} else {
my $access_text;
if (ref($lt) eq 'HASH') {
- $access_text = $lt->{$portaccess};
+ $access_text = $lt->{$portaccess};
}
$r->print(&mt('There are no available files of the specified access type: [_1]',$access_text));
}
@@ -545,26 +701,12 @@ sub portfolio_files {
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});
+ &Apache::lonnet::get_portfolio_access($cdom,$cnum,$filename,$group,$$access_info{$filename});
if ($portaccess eq 'both') {
if (($access_status ne 'ok') &&
($access_status !~ /^[^:]+:guest_/)) {
@@ -603,10 +745,10 @@ sub build_hierarchy {
my $output;
if ($mode eq 'listfiles') {
if ($filecounts->{'both'} > 0) {
- $output = &portfolio_table_start();
+ $output = &Apache::loncommon::start_data_table();
$output .= &parse_directory($r,0,$allfileshash,'',$is_course,
$group);
- $output .= '
';
+ $output .= &Apache::loncommon::end_data_table();
}
}
return $output;
@@ -622,58 +764,83 @@ sub parse_directory {
$group);
my $getpropath = 1;
my %dirlist = map {
- ((split('&',$_,2))[0],1)
- } &Apache::lonnet::dirlist($portfolio_root.$path,$cdom,$cnum,$getpropath);
+ ((split('&',$_,2))[0],1)
+ } &Apache::lonnet::dirlist($portfolio_root.$path,$cdom,$cnum,$getpropath);
foreach my $item (sort(keys(%{$currhash}))) {
- $output .= &portfolio_row_start();
+ $output .= &Apache::loncommon::start_data_table_row();
$output .= '';
if (ref($currhash->{$item}) eq 'HASH') {
my $title=&HTML::Entities::encode($item,'<>&"');
$output .= ' '.$title;
- $output .= ' ';
+ $output .= ' '
+ .&Apache::loncommon::end_data_table_row();
$output .= &parse_directory($r,$depth,$currhash->{$item},
- $path.'/'.$item,$is_course,$group);
+ $path.'/'.$item,$is_course,$group);
} else {
- my $file_name;
- if ($currhash->{$item} =~ m|/([^/]+)$|) {
- $file_name = $1;
- } else {
- $file_name = $currhash->{$item};
- }
- my $have_meta = exists($dirlist{$file_name.'.meta'});
+ 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};
+ '/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.')';
- }
+ 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.='';
- if ($have_meta) {
- $output.= ' ';
- }
- $output .= ' ';
+ ' '.
+ ' '.$showname.'';
+ $output.='';
+ if ($have_meta) {
+ $output.= ' ';
+ }
+ $output .= ' '
+ .&Apache::loncommon::end_data_table_row();
}
- }
+ }
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 = &Apache::lonnet::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__