--- loncom/interface/lonaboutme.pm 2009/04/03 10:46:13 1.122 +++ loncom/interface/lonaboutme.pm 2014/01/28 16:22:30 1.156 @@ -1,7 +1,7 @@ # The LearningOnline Network # Personal Information Page # -# $Id: lonaboutme.pm,v 1.122 2009/04/03 10:46:13 amueller Exp $ +# $Id: lonaboutme.pm,v 1.156 2014/01/28 16:22:30 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -50,8 +50,6 @@ described at http://www.lon-capa.org. =item handler() -=item in_course() - =item aboutme_info() =item print_portfiles_link() @@ -80,7 +78,7 @@ use Apache::Constants qw(:common); use Apache::loncommon; use Apache::lonnet; use Apache::lontexconvert; -use Apache::lonfeedback; +use Apache::lonhtmlgateway; use Apache::lonrss(); use Apache::lonlocal; use Apache::lonmsgdisplay(); @@ -96,14 +94,14 @@ 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); @@ -121,11 +119,11 @@ sub handler { $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:').''); + $r->print('

'.&mt('No user personal information page available') .'

'. + &mt('This is a result of one of the following:').''); $r->print(&Apache::loncommon::end_page()); } return OK; @@ -141,20 +139,19 @@ sub handler { # ------------------------------------------------------------ Get Query String &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['forceedit','forcestudent', - 'register','popup']); - -# ----------------------------------------------- Available Portfolio file display + ['forceedit','forcestudent','todocs', + 'register','popup','folderpath','title']); +# ----------------------------------------------- Available Portfolio file display 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('This is a result of one of the following:').''); } else { - my ($blocked,$blocktext) = + my ($blocked,$blocktext) = &Apache::loncommon::blocking_status('port',$cnum,$cdom); if (!$blocked) { &display_portfolio_files($r,$is_course); @@ -168,16 +165,22 @@ sub handler { 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}); + my $args = {'function' => undef, + 'domain' => $cdom}; + if ($env{'form.register'}) { + $args->{'force_register'} = $env{'form.register'}; + } else { + my %coursedescription = + &Apache::lonnet::coursedescription($cdom.'_'.$cnum); + my $cdescr = $coursedescription{'description'}; + my $brcrum = [{href=>"/adm/$cdom/$cnum/aboutme", + text=>&mt('Course Information - [_1]',$cdescr), + no_mt=>1} + ]; + $args->{'bread_crumbs'} = $brcrum; + } + my $start_page = &Apache::loncommon::start_page( + "Course Information",undef,$args); $r->print($start_page); $r->print('

'.&mt('Group Portfolio').'

'); &print_portfiles_link($r,$is_course); @@ -186,283 +189,233 @@ sub handler { return OK; } -# --------------------------------------------------------------- Force Student - my $forcestudent=''; - if ($env{'form.forcestudent'}) { $forcestudent='student'; }; - - my $forceregister = ''; - if ($forcestudent eq '') { - $forceregister = $env{'form.register'}; +#------------Get rights + my %courseenv=&Apache::lonnet::dump('environment',$cdom,$cnum); + my %syllabus=&Apache::lonnet::dump('aboutme',$cdom,$cnum); + my ($allowed,$coursedomain,$coursenum); + if ($env{'request.course.id'}) { + $coursedomain = $env{'course.'.$env{'request.course.id'}.'.domain'}; + $coursenum = $env{'course.'.$env{'request.course.id'}.'.num'}; + } + my ($cfile) = + &Apache::lonnet::can_edit_resource($env{'request.noversionuri'}, + $coursenum,$coursedomain, + $env{'request.noversionuri'}, + $env{'request.symb'}); + if ($cfile ne '') { + $allowed = 1; } -#------------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; } - - + if (!$env{'form.forceedit'} 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 ($env{'form.popup'}) { + 'force_register' => $env{'form.register'}, + }; + if ($env{'form.popup'}) { # Don't show breadcrumbs in popup window $args->{'no_nav_bar'} = 1; + } elsif (!$env{'form.register'}) { #Don't show breadcrumbs twice, when this page is part of course content and you call it + if (($env{'request.course.id'}) && + ($env{'form.folderpath'} =~ /^supplemental/)) { + my $crstype = &Apache::loncommon::course_type(); + my $title = $env{'form.title'}; + if ($title eq '') { + $title = &mt('Personal Information Page'); + } + my $brcrum = + &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1); + if (ref($brcrum) eq 'ARRAY') { + $args->{'bread_crumbs'} = $brcrum; + } + } else { + $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 Privacy note (edit mode) or last modified date. + + 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.') + .'
' + ); + } elsif ($syllabus{'uploaded.lastmodified'}) { + #Print last modified + my $lastmod=$syllabus{'uploaded.lastmodified'}; + $lastmod=($lastmod?&Apache::lonlocal::locallocaltime($lastmod):&mt('never')); + $r->print('
'); + $r->print(&mt('Last updated').': '.$lastmod . ''); + $r->print('
'); } - $args->{'bread_crumbs'} = [{href=>"/adm/fhwfdev/$cnum/aboutme",text=>"Personal Information Page"}]; - my $start_page = - &Apache::loncommon::start_page("Personal Data",$rss_link,$args); - $r->print($start_page); - - } - -#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 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'))); - } - } - -#----------------Print Functions - if ($target ne 'tex'){ - $r->print(&Apache::lontemplate::start_functionslist()); - if($allowed){ - my $query_string = &build_query_string({'forcestudent' => '1','popup' => $env{'form.popup'}}); - $r->print(&Apache::lontemplate::item_functionslist( - ''.&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'}}); - $r->print(&Apache::lontemplate::item_functionslist( - ''. &mt('Edit').'')); - } - $r->print(&Apache::lontemplate::item_functionslist( - &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'})) { - $r->print(&Apache::lontemplate::item_functionslist( - &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'})) { - $r->print(&Apache::lontemplate::item_functionslist( - &Apache::loncommon::slot_reservations_link('Slot reservation history',$cnum,$cdom))); - } - $r->print(&Apache::lontemplate::item_functionslist( - &Apache::loncommon::noteswrapper(&mt('Add Records'),$cnum,$cdom))); - } - $r->print(&Apache::lontemplate::end_functionslist()); - } + } + #------Print Headtitle - if ($target ne 'tex') { - $r->print('
'); - $r->print('

'.&Apache::loncommon::plainname($cnum,$cdom).'

'); - $r->print('
'); - 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').'}\\\\'); - } + if ($target ne 'tex') { + $r->print('
'. + '

'.&Apache::loncommon::plainname($cnum,$cdom).'

'); + if ($allowed) { + $r->print('
'); + if ($courseenv{'nickname'}) { + $r->print('

"'.$courseenv{'nickname'}.'"

'); + } + $r->print('

'.&Apache::lonnet::domain($cdom,'description').'

'); + #Print Help Text + $r->print('
'. + &Apache::loncommon::help_open_topic('Uploaded_Templates_TextBoxes',&mt('Help with filling in text boxes')). + '

'); + } else { + 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 $query_string; - - 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::userphotoupload('uploaddoc','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}; + chomp($field); + my $gateway = Apache::lonhtmlgateway->new(); + $field = $gateway->process_incoming_html($field,1); + $syllabus{$syl_field}=$field; + } + $syllabus{'uploaded.lastmodified'}=time; + &Apache::lonnet::put('aboutme',\%syllabus,$cdom,$cnum); + } -my $lastmod; -my $image; + my $image; # ---------------------------------------------------------------- Get syllabus if (($syllabus{'uploaded.lastmodified'}) || ($allowed)) { - $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'}); - - #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); - } - - } - - if ($allowed) { - $r->print( - '
'. - '

'.&mt('Upload a Photo').'

'. - ''. - ''. - ''. - '
'); - if ($syllabus{'uploaded.photourl'}) { - $r->print('
') - } - $r->print('

'); - } - - if($allowed) { - $r->print('

'); - } - - if($target ne 'tex') #print Image - { - &Apache::lontemplate::start_ContentBox($r); - &Apache::lontemplate::end_ContentBox($r); - $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_ContentBoxSpecial'); - $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('\\\\');} + if ($syllabus{'uploaded.photourl'}) { + &Apache::lonnet::allowuploaded('/adm/aboutme',$syllabus{'uploaded.photourl'}); + + $image=qq|Photo of the user|; + + 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 { - # &Apache::lontemplate::send_message($r,$cnum,$cdom); - $r->print('

'.&mt('No personal information provided').'.

'); + $r->print('

'.&mt('No personal information provided').'.

'); } - if($target ne 'tex'){ - #$r->print('
'); - #$r->print('
'); - } if ($env{'request.course.id'} - && &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_ContentBoxSpecial'); - $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); - $r->print('

'); - &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); - } + && &Apache::lonnet::allowed('srm',$env{'request.course.id'}) + && &Apache::lonnet::in_course($cdom,$cnum,$coursedomain,$coursenum,undef,1)) { + 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'); + } } - $r->print(''); - $r->print(''); if ($target ne 'tex') { + $r->print(''); if ($env{'form.popup'}) { - $r->print('

'.&mt('Close window').''); + $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; -} -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; + + return OK; } sub aboutme_info { @@ -486,15 +439,15 @@ sub print_portfiles_link { 'vpfi' => 'Viewable portfolio files', 'vgpf' => 'Viewable group portfolio files', 'difl' => 'Display file listing', - ); + ); if ($filecounts->{'both'} > 0) { - $output = '

'; - $output .= ($is_course?$lt{'vgpf'}:$lt{'vpfi'}).'

'; - - #$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.').''; - $output .='

'; - $output .='
'; + $output .= '
'; + } elsif ($is_course) { + $output .= '
'.&mt('There are currently no publicly accessible or password protected group portfolio files.').'
'; } $r->print($output); return; @@ -525,11 +479,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')); } @@ -556,34 +510,47 @@ sub display_portfolio_header { 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 $args = {'domain' => $cdom}; + if ($env{'form.forcestudent'}) { + $args->{'function'} = 'student'; + } 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,}); - if (!($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public')) { - &Apache::lonhtmlcommon::add_breadcrumb - ({href=>"/adm/$cdom/$cnum/aboutme".$query_string, - 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.')); + if (($env{'request.course.id'} eq $cdom.'_'.$cnum) && + ($env{'form.register'})) { + $args->{force_register} = $env{'form.register'}; + } else { + my %coursedescription = &Apache::lonnet::coursedescription($cdom.'_'.$cnum); + my $cdescr = $coursedescription{'description'}; + my $brcrum = [{href=>"/adm/$cdom/$cnum/aboutme".$query_string, + text=>&mt('Course Information - [_1]',$cdescr), + no_mt=>1}, + {href=>"/adm/$cdom/$cnum/aboutme/portfolio".$query_string, + text=>'Viewable group portfolio files'} + ]; + $args->{bread_crumbs} = $brcrum; } - $output .= '

'.&mt('Portfolio files for [_1]',$name).'

'; + $output = &Apache::loncommon::start_page('Viewable group portfolio files',undef,$args). + '

'.&mt('Group Portfolio files').'

'; + } else { + if ($env{'request.course.id'} && $env{'form.register'}) { + $args->{force_register} = $env{'form.register'}; + } else { + my $brcrum = [{href => "/adm/$cdom/$cnum/aboutme".$query_string, + text => &mt('Personal Information Page - [_1]',$name), + title => &mt('Go to personal information page for [_1]',$name), + no_mt => 1}, + {href => "/adm/$cdom/$cnum/aboutme/portfolio".$query_string, + text => &mt('Viewable files'), + title => &mt('Viewable portfolio files for [_1]',$name), + no_mt => 1} + ]; + $args->{bread_crumbs} = $brcrum; + } + $output = + &Apache::loncommon::start_page('Viewable portfolio files', + undef,$args). + '

'.&mt('Portfolio files for [_1]',$name).'

'; } $r->print($output); return; @@ -604,8 +571,8 @@ sub display_portfolio_files { } my $output = '
'. - &mt('File access type: ').''; foreach my $type ('withoutpass','withpass','both') { $output .= '


'; + $output .= ''."\n"; + if ($env{'form.register'}) { + $output .= ''."\n"; + } + $output .= ''. + '

'; $r->print($output); 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)); + if ($env{'request.course.id'} && $env{'form.register'}) { + 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(''); } - $r->print(''); } return; } @@ -642,9 +614,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'; @@ -660,7 +632,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; @@ -684,7 +656,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)); } @@ -692,26 +664,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_/)) { @@ -750,10 +708,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; @@ -768,57 +726,61 @@ sub parse_directory { 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); + my ($listref,$listerror) = + &Apache::lonnet::dirlist($portfolio_root.$path,$cdom,$cnum,$getpropath); + my %dirlist; + if (ref($listref) eq 'ARRAY') { + %dirlist = map { ((split('&',$_,2))[0],1) } @{$listref}; + } 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 .= ''.&mt('Folder').' '.$title.' '.$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.= ''.&mt('Metadata').''; - } - $output .= ''; + ''. + ' '.$showname.''; + $output.=''; + if ($have_meta) { + $output.= ''.&mt('Metadata').''; + } + $output .= '' + .&Apache::loncommon::end_data_table_row(); } - } + } return $output; } @@ -833,13 +795,13 @@ sub aboutme_access { 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'}); + my %coursehash = &Apache::lonnet::coursedescription($env{'request.course.id'}); $cdom = $coursehash{'domain'}; $cnum = $coursehash{'cnum'}; } - if ((&Apache::lonnet::allowed('srm',$privcheck)) || + if ((&Apache::lonnet::allowed('srm',$privcheck)) || (&Apache::lonnet::allowed('dff',$privcheck))) { - if (&in_course($uname,$udom,$cnum,$cdom)) { + if (&Apache::lonnet::in_course($uname,$udom,$cnum,$cdom,undef,1)) { return 1; } } 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.