--- loncom/interface/lonaboutme.pm 2006/04/08 06:59:34 1.41
+++ loncom/interface/lonaboutme.pm 2006/08/04 20:41:32 1.49
@@ -1,7 +1,7 @@
# The LearningOnline Network
# "About Me" Personal Information
#
-# $Id: lonaboutme.pm,v 1.41 2006/04/08 06:59:34 albertel Exp $
+# $Id: lonaboutme.pm,v 1.49 2006/08/04 20:41:32 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -48,7 +48,7 @@ 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);
# Is this even a user?
if (&Apache::lonnet::homeserver($cnum,$cdom) eq 'no_host') {
&Apache::loncommon::simple_error_page($r,'No info',
@@ -62,18 +62,26 @@ sub handler {
'ccc_webreferences' => 'Web References');
# ------------------------------------------------------------ Get Query String
- &Apache::loncommon::get_unprocessed_cgi
- ($ENV{'QUERY_STRING'},['forcestudent','register']);
-# ----------------------------------------------------- Force menu registration
- my $addentries='';
- if ($env{'form.register'}) {
- $addentries=' onLoad="'.&Apache::lonmenu::loadevents().
- '" onUnload="'.&Apache::lonmenu::unloadevents().'"';
- $r->print(&Apache::lonmenu::registerurl(1));
+ &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+ ['forceedit','forcestudent',
+ 'register']);
+
+# ----------------------------------------------- Available Portfolio file display
+ if (($target ne 'tex') && ($action eq 'portfolio')) {
+ &display_portfolio_header($r);
+ &display_portfolio_files($r);
+ $r->print(&Apache::loncommon::end_page());
+ return OK;
}
+
# --------------------------------------------------------------- Force Student
my $forcestudent='';
if ($env{'form.forcestudent'}) { $forcestudent='student'; };
+
+ my $forceregister = '';
+ if ($forcestudent eq '') {
+ $forceregister = $env{'form.register'};
+ }
# --------------------------------------- There is such a user, get environment
my %courseenv=&Apache::lonnet::dump('environment',$cdom,$cnum);
@@ -81,10 +89,9 @@ sub handler {
my $start_page =
&Apache::loncommon::start_page("Personal Information",undef,
{'function' => $forcestudent,
- 'add_entries' => $addentries,
- 'domain' => $cdom,
+ 'domain' => $cdom,
'force_register' =>
- $env{'form.register'},});
+ $forceregister,});
$r->print($start_page);
$r->print('
'.&Apache::loncommon::plainname($cnum,$cdom).'
');
} else {
@@ -111,13 +118,15 @@ sub handler {
if ($forcestudent or $target eq 'tex') { $allowed=0; }
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_TextBoxes','Help with filling in text boxes').'
Show Public View'.
&Apache::loncommon::help_open_topic('Uploaded_Templates_PublicView').'
');
} elsif ($privleged && $target ne 'tex') {
- $r->print(''.
+ my $query_string = &build_query_string({'forceedit' => '1',});
+ $r->print(''.
&mt('Edit').'
');
}
if (($env{'form.uploaddoc.filename'}) &&
@@ -206,10 +215,15 @@ sub handler {
if ($allowed) {
$r->print('');
}
- if ($target ne 'tex') {$r->print('
');} else {$r->print('\\\\');}
+ if ($target ne 'tex') {$r->print('
');} else {$r->print('\\\\');}
} else {
$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') {
@@ -243,7 +257,269 @@ sub handler {
$r->print('\end{document}');
}
return OK;
-}
+}
+
+sub aboutme_info {
+ my ($r) = @_;
+ my (undef,undef,$cdom,$cnum)=split(/\//,$r->uri);
+ my $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();
+ my $output;
+ if ($filecounts->{'both'} > 0) {
+ $output = &mt('Viewable portfolio files
');
+ $output .= ''.&mt('Display file listing').
+ '
';
+ $output .= &mt('A total of [quant,_1,portfolio file] owned by [_2] are available.',$filecounts->{'both'},$name).'';
+ if ($filecounts->{'withoutpass'}) {
+ $output .= '- '.&mt('[quant,_1,file] are publicly accessible.',$filecounts->{'withoutpass'}).'
';
+ }
+ if ($filecounts->{'withpass'}) {
+ $output .= '- '.&mt('[quant,_1,file] require a passphrase for access.',$filecounts->{'withpass'}).'
';
+ }
+ $output .= '
';
+ }
+ $r->print($output);
+ return;
+}
+
+sub build_query_string {
+ my ($new_items) = @_;
+ my $query_string;
+ my @formelements = ('register');
+ my $new = 0;
+ if (ref($new_items) eq 'HASH') {
+ $new = 1;
+ if (!defined($new_items->{'forceedit'}) &&
+ !defined($new_items->{'forcestudent'})) {
+ push(@formelements,('forceedit','forcestudent'));
+ }
+ } else {
+ push(@formelements,('forceedit','forcestudent'));
+ }
+ foreach my $element (@formelements) {
+ if (exists($env{'form.'.$element})) {
+ if ((!$new) || (!defined($new_items->{$element}))) {
+ $query_string .= '&'.$element.'='.$env{'form.'.$element};
+ }
+ }
+ }
+ if ($new) {
+ foreach my $key (keys(%{$new_items})) {
+ $query_string .= '&'.$key.'='.$new_items->{$key};
+ }
+ }
+ $query_string =~ s/^\&/\?/;
+ return $query_string;
+}
+
+sub display_portfolio_header {
+ my ($r) = @_;
+ my ($cdom,$cnum,$name) = &aboutme_info($r);
+ 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,
+ '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/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) = @_;
+ my ($cdom,$cnum,$name) = &aboutme_info($r);
+ 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).'');
+ return;
+}
+
+sub portfolio_files {
+ my ($r,$mode,$lt) = @_;
+ my ($cdom,$cnum,$name) = &aboutme_info($r);
+ my $filecounts = {
+ withpass => 0,
+ withoutpass => 0,
+ both => 0,
+ };
+ my $current_permissions =
+ &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';
+ } else {
+ $portaccess = 'withoutpass';
+ if (exists($env{'form.portaccess'})) {
+ $portaccess = $env{'form.portaccess'};
+ }
+ }
+
+ foreach my $filename (keys(%access_controls)) {
+ my $access_status =
+ &Apache::lonnet::get_portfolio_access($cdom,$cnum,$filename,undef,
+ $access_controls{$filename});
+ if ($portaccess eq 'both') {
+ if (($access_status ne 'ok') &&
+ ($access_status !~ /^[^:]+:guest_/)) {
+ next;
+ }
+ } elsif ($portaccess eq 'withoutpass') {
+ if ($access_status ne 'ok') {
+ next;
+ }
+ } elsif ($portaccess eq 'withpass') {
+ if ($access_status !~ /^[^:]+:guest_/) {
+ next;
+ }
+ }
+ if ($mode eq 'listfiles') {
+ $filename =~ s/^\///;
+ my @pathitems = split('/',$filename);
+ my $lasthash = \%allfileshash;
+ while (@pathitems > 1) {
+ my $newlevel = shift(@pathitems);
+ if (!exists($lasthash->{$newlevel})) {
+ $lasthash->{$newlevel} = {};
+ }
+ $lasthash = $lasthash->{$newlevel};
+ }
+ $lasthash->{$pathitems[0]} = $filename;
+ }
+ if ($access_status eq 'ok') {
+ $filecounts->{'withoutpass'} ++;
+ } elsif ($access_status =~ /^[^:]+:guest_/) {
+ $filecounts->{'withpass'} ++;
+ }
+ }
+ $filecounts->{'both'} = $filecounts->{'withoutpass'} +
+ $filecounts->{'withpass'};
+ if ($mode eq 'listfiles') {
+ my $output;
+ if (keys(%allfileshash) > 0) {
+ $output = &portfolio_table_start();
+ $output .= &parse_directory($r,0,\%allfileshash,'');
+ $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 '';
+ }
+}
+
+sub parse_directory {
+ my ($r,$depth,$currhash,$path) = @_;
+ my ($cdom,$cnum,$name) = &aboutme_info($r);
+ $depth++;
+ my $output;
+
+ my $portfolio_root = &Apache::portfolio::get_portfolio_root($cdom,$cnum);
+ my %dirlist = map {
+ ((split('&',$_,2))[0],1)
+ } &Apache::lonnet::dirlist($path,$cdom,$cnum,$portfolio_root);
+ &Apache::lonnet::logthis("$path -- $portfolio_root");
+ 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},
+ $path.'/'.$item);
+ } else {
+ my $showname;
+ if ($currhash->{$item} =~ m|/([^/]+)$|) {
+ $showname = $1;
+ } else {
+ $showname = $currhash->{$item};
+ }
+ $showname=&HTML::Entities::encode($showname,'<>&"');
+ my $url = '/uploaded/'.$cdom.'/'.$cnum.'/portfolio/'.
+ $currhash->{$item};
+ $output .= ''.
+ ''.
+ ' '.$showname.'';
+ $output.='';
+ &Apache::lonnet::logthis("sh $showname");
+ if (exists($dirlist{$showname.'.meta'})) {
+ $output.= '';
+ }
+ $output .= ' | ';
+ }
+ }
+ return $output;
+}
1;
__END__