--- loncom/interface/lonaboutme.pm 2006/09/19 14:02:42 1.55
+++ loncom/interface/lonaboutme.pm 2009/03/18 03:14:18 1.70.2.3
@@ -1,7 +1,7 @@
# The LearningOnline Network
# "About Me" Personal Information
#
-# $Id: lonaboutme.pm,v 1.55 2006/09/19 14:02:42 raeburn Exp $
+# $Id: lonaboutme.pm,v 1.70.2.3 2009/03/18 03:14:18 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -57,7 +57,31 @@ sub handler {
'No user information available');
return OK;
} else {
- $is_course = &check_for_course($cdom,$cnum);
+ $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"));
+ $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
@@ -69,14 +93,28 @@ sub handler {
# ------------------------------------------------------------ Get Query String
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['forceedit','forcestudent',
- 'register']);
+ 'register','popup']);
# ----------------------------------------------- Available Portfolio file display
if (($target ne 'tex') && ($action eq 'portfolio')) {
&display_portfolio_header($r,$is_course);
- &display_portfolio_files($r,$is_course);
- $r->print(&Apache::loncommon::end_page());
- return OK;
+ 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) {
@@ -108,12 +146,15 @@ 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;
+ }
my $start_page =
- &Apache::loncommon::start_page("Personal Information",undef,
- {'function' => $forcestudent,
- 'domain' => $cdom,
- 'force_register' =>
- $forceregister,});
+ &Apache::loncommon::start_page("Personal Information",$rss_link,$args);
$r->print($start_page);
$r->print(''.&Apache::loncommon::plainname($cnum,$cdom).'
');
} else {
@@ -125,10 +166,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;
@@ -140,14 +181,14 @@ sub handler {
if ($forcestudent or $target eq 'tex') { $allowed=0; }
if ($allowed) {
- my $query_string = &build_query_string({'forcestudent' => '1',});
+ 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','Help with filling in text boxes').'Show Public View'.
+ &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',});
+ my $query_string = &build_query_string({'forceedit' => '1','popup' => $env{'form.popup'}});
$r->print(''.
&mt('Edit').'
');
}
@@ -171,12 +212,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);
@@ -200,18 +241,19 @@ sub handler {
if ($allowed) {
$r->print(
''.
'');
}
if ($target ne 'tex') {$r->print('
');} else {$r->print('\\\\');}
@@ -246,34 +292,37 @@ sub handler {
&print_portfiles_link($r,$is_course);
}
- 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}');
@@ -281,6 +330,33 @@ sub handler {
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,$is_course) = @_;
my (undef,undef,$cdom,$cnum)=split(/\//,$r->uri);
@@ -294,7 +370,8 @@ sub aboutme_info {
sub print_portfiles_link {
my ($r,$is_course) = @_;
my ($cdom,$cnum,$name) = &aboutme_info($r,$is_course);
- my $filecounts = &portfolio_files($r,'showlink',undef,$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(
@@ -311,11 +388,11 @@ sub print_portfiles_link {
if ($is_course) {
$output .= &mt('One group portfolio file is available.').'
';
} else {
- $output .= &mt('One portfolio file owned by [_1] is available.').'';
+ $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.').'';
+ $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).'';
}
@@ -426,7 +503,8 @@ sub display_portfolio_files {
&mt('Update display').'" />';
$output .= '
';
$r->print($output);
- my $filecounts = &portfolio_files($r,'listfiles',\%lt,$is_course);
+ 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('
';
@@ -629,14 +707,28 @@ sub parse_directory {
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;
+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 0;
+ return;
}
1;