Diff for /loncom/interface/lonaboutme.pm between versions 1.52 and 1.118

version 1.52, 2006/08/16 19:40:46 version 1.118, 2009/03/27 13:50:36
Line 1 Line 1
 # The LearningOnline Network  # The LearningOnline Network
 # "About Me" Personal Information  # Personal Information Page
 #  #
 # $Id$  # $Id$
 #  #
Line 26 Line 26
 # http://www.lon-capa.org/  # 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;  package Apache::lonaboutme;
   
 use strict;  use strict;
Line 37  use Apache::lonfeedback; Line 84  use Apache::lonfeedback;
 use Apache::lonrss();  use Apache::lonrss();
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonmsgdisplay();  use Apache::lonmsgdisplay();
   use Apache::lontemplate;
 use HTML::Entities();  use HTML::Entities();
   use Image::Magick;
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
Line 50  sub handler { Line 99  sub handler {
  $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 (undef,undef,$cdom,$cnum,undef,$action)=split(/\//,$r->uri);
       my $is_course;
 # Is this even a user?  # Is this even a user?
     if (&Apache::lonnet::homeserver($cnum,$cdom) eq 'no_host') {      if (&Apache::lonnet::homeserver($cnum,$cdom) eq 'no_host') {
  &Apache::loncommon::simple_error_page($r,'No info',   &Apache::loncommon::simple_error_page($r,'No info',
       'No user information available');        'No user information available');
         return OK;          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('<h2>'.&mt('No user personal information page available') .'</h2>'.
                                 &mt('This is a result of one of the following:').'<ul>'.
                                 '<li>'.&mt('The administrator of this domain has disabled personal information page functionality for this specific user.').'</li>'.
                                 '<li>'.&mt('The domain has been configured to disable, by default, personal information page functionality for all users in the domain.').'</li>'.
                                 '</ul>');
                       $r->print(&Apache::loncommon::end_page());
                   }
                   return OK;
               }
           }
       }
   
 # --------------------------------------------------------- The syllabus fields  # --------------------------------------------------------- The syllabus fields
     my %syllabusfields=&Apache::lonlocal::texthash(      my %syllabusfields=&Apache::lonlocal::texthash(
        'aaa_contactinfo'   => 'Contact Information',         'aaa_contactinfo'   => 'Contact Information',
        'bbb_aboutme'       => 'About Me',         'bbb_aboutme'       => 'Personal Information',
        'ccc_webreferences' => 'Web References');         'ccc_webreferences' => 'Web References');
   
 # ------------------------------------------------------------ Get Query String  # ------------------------------------------------------------ Get Query String
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
     ['forceedit','forcestudent',      ['forceedit','forcestudent',
      'register']);       'register','popup']);
   
 # ----------------------------------------------- Available Portfolio file display   # ----------------------------------------------- Available Portfolio file display 
     if (($target ne 'tex') && ($action eq 'portfolio')) {      if (($target ne 'tex') && ($action eq 'portfolio')) {
         &display_portfolio_header($r);          &display_portfolio_header($r,$is_course);
         &display_portfolio_files($r);          if ((!$is_course) && (!&Apache::lonnet::usertools_access($cnum,$cdom,'portfolio'))) {
               $r->print('<h2>'.&mt('No user portfolio available') .'</h2>'.
                         &mt('This is a result of one of the following:').'<ul>'.
                         '<li>'.&mt('The administrator of this domain has disabled portfolio functionality for this specific user.').'</li>'.
                         '<li>'.&mt('The domain has been configured to disable, by default, portfolio functionality for all users in the domain.').'</li>'.
                         '</ul>');
           } 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());          $r->print(&Apache::loncommon::end_page());
         return OK;          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('<h2>'.&mt('Group Portfolio').'</h2>');
               &print_portfiles_link($r,$is_course);
               $r->print(&Apache::loncommon::end_page());
           }
           return OK;
       }
   
 # --------------------------------------------------------------- Force Student  # --------------------------------------------------------------- Force Student
     my $forcestudent='';      my $forcestudent='';
     if ($env{'form.forcestudent'}) { $forcestudent='student'; };      if ($env{'form.forcestudent'}) { $forcestudent='student'; };
Line 83  sub handler { Line 194  sub handler {
     if ($forcestudent eq '') {      if ($forcestudent eq '') {
         $forceregister = $env{'form.register'};          $forceregister = $env{'form.register'};
     }      }
          
   #------------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  # --------------------------------------- There is such a user, get environment
     my %courseenv=&Apache::lonnet::dump('environment',$cdom,$cnum);    
     if ($target ne 'tex') {      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 =    my $start_page = 
     &Apache::loncommon::start_page("Personal Information",undef,      &Apache::loncommon::start_page("Personal Data",$rss_link,$args);
    {'function'       => $forcestudent,  
      'domain'         => $cdom,  
     'force_register' =>  
             $forceregister,});  
  $r->print($start_page);   $r->print($start_page);
  $r->print('<h1>'.&Apache::loncommon::plainname($cnum,$cdom).'</h1>');          
     } else {      }   
  $r->print('\noindent{\large\textbf{'.&Apache::loncommon::plainname($cnum,$cdom).'}}\\\\\\\\');  
     }  
     if ($courseenv{'nickname'}) {  
        $r->print(  
          '<h2>&quot;'.$courseenv{'nickname'}.  
          '&quot;</h2>');  
     }  
     if ($target ne 'tex') {  
  $r->print('<h3>'.$Apache::lonnet::domaindescription{$cdom}.'</h3>'.  
   '<p>'.&Apache::loncommon::messagewrapper('Send me a message',$cnum,$cdom).'</p>'.&Apache::lonrss::advertisefeeds($cnum,$cdom));  
     } else {  
  $r->print('\textbf{'.$Apache::lonnet::domaindescription{$cdom}.'}\\\\');  
     }  
     my %syllabus=&Apache::lonnet::dump('aboutme',$cdom,$cnum);  
     my $allowed=0;  
   
   #Print Privacy Note
          if ($allowed) {          
              $r->print('<p class="LC_info">'
                       .'<b>'.&mt('Privacy Note:').'</b> '
                       .&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.')
                       .'</p>'
              );
    } 
   
   #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'){
    &Apache::lontemplate::start_functionslist($r);
         if($allowed){
    my $query_string = &build_query_string({'forcestudent' => '1','popup' => $env{'form.popup'}});
    &Apache::lontemplate::item_functionslist($r,'<a href="'.$r->uri.$query_string.'">'.&mt('Show Public View').'</a>'.&Apache::loncommon::help_open_topic('Uploaded_Templates_PublicView'));
       }elsif($privleged){
    my $query_string = &build_query_string({'forceedit' => '1','popup' => $env{'form.popup'}});
    &Apache::lontemplate::item_functionslist($r,'<a href="'.$r->uri.$query_string.'">'. &mt('Edit').'</a>');
    }
    &Apache::lontemplate::item_functionslist($r,&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'})) {
    &Apache::lontemplate::item_functionslist($r,&Apache::loncommon::track_student_link('View recent activity by this student',
      $cnum,$cdom).('&nbsp;'x2));
        }
                           if (&Apache::lonnet::allowed('vgr', $env{'request.course.id'}) || 
                               &Apache::lonnet::allowed('vgr', $env{'request.course.id'}.'/'.
                                                        $env{'request.course.sec'})) {
                               &Apache::lontemplate::item_functionslist($r,&Apache::loncommon::slot_reservations_link('Slot reservation history',
                                           $cnum,$cdom).('&nbsp;'x2));
                           }
        &Apache::lontemplate::item_functionslist($r,&Apache::loncommon::noteswrapper(&mt('Add Records'),$cnum,$cdom));
    }
    &Apache::lontemplate::end_functionslist($r);
    }  
   #------Print Headtitle
    if ($target ne 'tex') {
    $r->print('<div class="LC_ContentBoxSpecial">');
    $r->print('<h2 class="LC_hcell">'.&Apache::loncommon::plainname($cnum,$cdom).'</h2>');
    $r->print('<blockquote>');
    if ($courseenv{'nickname'}) {
         $r->print('<h2>&quot;'.$courseenv{'nickname'}.'&quot;</h2>');
       }
    $r->print('<h3>'.&Apache::lonnet::domain($cdom,'description').'</h3>');
    }
   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?  # does this user have privileges to post, etc?
   
        my $privleged=$allowed=(($env{'user.name'} eq $cnum) &&        
        ($env{'user.domain'} eq $cdom));   my $query_string; 
        if ($forcestudent or $target eq 'tex') { $allowed=0; }  
    
        if ($allowed) {  
            my $query_string = &build_query_string({'forcestudent' => '1',});  
    $r->print('<p><b>'.&mt('Privacy Note').':</b> '.  
      &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.').  
      '</p>'.  
      &Apache::loncommon::help_open_topic('Uploaded_Templates_TextBoxes','Help with filling in text boxes').'</p><p><a href="'.$r->uri.$query_string.'">Show Public View</a>'.  
      &Apache::loncommon::help_open_topic('Uploaded_Templates_PublicView').'</p>');  
        } elsif ($privleged && $target ne 'tex') {  
            my $query_string = &build_query_string({'forceedit' => '1',});  
    $r->print('<p><a href="'.$r->uri.$query_string.'"><font size="+1">'.  
      &mt('Edit').'</font></a></p>');  
        }  
       if (($env{'form.uploaddoc.filename'}) &&        if (($env{'form.uploaddoc.filename'}) &&
           ($env{'form.storeupl'}) && ($allowed)) {            ($env{'form.storeupl'}) && ($allowed)) {
    if ($env{'form.uploaddoc.filename'}=~/\.(gif|jpg|png|jpeg)$/i) {     if ($env{'form.uploaddoc.filename'}=~/\.(gif|jpg|png|jpeg)$/i) {
Line 137  sub handler { Line 291  sub handler {
   &Apache::lonnet::removeuploadedurl($syllabus{'uploaded.photourl'});    &Apache::lonnet::removeuploadedurl($syllabus{'uploaded.photourl'});
       }        }
       $syllabus{'uploaded.photourl'}=        $syllabus{'uploaded.photourl'}=
                  &Apache::lonnet::userfileupload('uploaddoc',undef,'aboutme');                   &Apache::lonnet::userphotoupload('uploaddoc','aboutme');
    }     }
           $syllabus{'uploaded.lastmodified'}=time;            $syllabus{'uploaded.lastmodified'}=time;
           &Apache::lonnet::put('aboutme',\%syllabus,$cdom,$cnum);            &Apache::lonnet::put('aboutme',\%syllabus,$cdom,$cnum);
Line 150  sub handler { Line 304  sub handler {
  }   }
     }      }
        if (($allowed) && ($env{'form.storesyl'})) {         if (($allowed) && ($env{'form.storesyl'})) {
    foreach (keys %syllabusfields) {     foreach my $syl_field (keys(%syllabusfields)) {
                my $field=$env{'form.'.$_};                 my $field=$env{'form.'.$syl_field};
                $field=~s/\s+$//s;                 $field=~s/\s+$//s;
                $field=&Apache::lonfeedback::clear_out_html($field,                 $field=&Apache::lonfeedback::clear_out_html($field,
                                                            $env{'user.adv'});                                                             $env{'user.adv'});
        $syllabus{$_}=$field;         $syllabus{$syl_field}=$field;
            }             }
            $syllabus{'uploaded.lastmodified'}=time;             $syllabus{'uploaded.lastmodified'}=time;
            &Apache::lonnet::put('aboutme',\%syllabus,$cdom,$cnum);             &Apache::lonnet::put('aboutme',\%syllabus,$cdom,$cnum);
        }         }
   
   my $lastmod;
   my $image; 
 # ---------------------------------------------------------------- Get syllabus  # ---------------------------------------------------------------- Get syllabus
     if (($syllabus{'uploaded.lastmodified'}) || ($allowed)) {      if (($syllabus{'uploaded.lastmodified'}) || ($allowed)) {
        my $lastmod=$syllabus{'uploaded.lastmodified'};         $lastmod=$syllabus{'uploaded.lastmodified'};
        $lastmod=($lastmod?&Apache::lonlocal::locallocaltime($lastmod):&mt('never'));         $lastmod=($lastmod?&Apache::lonlocal::locallocaltime($lastmod):&mt('never'));
        $r->print(&mt('Last updated').': '.$lastmod);    $r->print('<br />'.&mt('Last updated').': '.$lastmod);
   
   
        if ($syllabus{'uploaded.photourl'}) {         if ($syllabus{'uploaded.photourl'}) {
    &Apache::lonnet::allowuploaded('/adm/aboutme',     &Apache::lonnet::allowuploaded('/adm/aboutme',
   $syllabus{'uploaded.photourl'});    $syllabus{'uploaded.photourl'});
    my $image=  
                qq{<img src="$syllabus{'uploaded.photourl'}" align="right" />};             #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{<img name="userPhoto" src="$syllabus{'uploaded.photourl'} " class="LC_AboutMe_Image" />};
      
    if ($target eq 'tex') {     if ($target eq 'tex') {
        $image=&Apache::lonxml::xmlparse($r,'tex',$image);         $image=&Apache::lonxml::xmlparse($r,'tex',$image);
    }     }
    $r->print($image);  
        }         }
   
        if ($allowed) {         if ($allowed) {
            $r->print(             $r->print(
  '<form method="post">  
                <input type="submit" name="delupl" value="Delete Photo" />  
           </form>'.  
  '<form method="post" enctype="multipart/form-data">'.   '<form method="post" enctype="multipart/form-data">'.
          '<h3>'.&mt('Upload a Photo').'</h3>'.           '<h3>'.&mt('Upload a Photo').'</h3>'.
          '<input type="file" name="uploaddoc" size="50">'.           '<input type="file" name="uploaddoc" size="50" />'.
          '<input type="submit" name="storeupl" value="Upload">'.           '<input type="submit" name="storeupl" value="'.&mt('Upload').'" />'.
  '</form><form method="post">');           '<input type="hidden" name="popup" value="'.$env{'form.popup'}.'" />'.
    '</form><form method="post"><input type="submit" name="delupl" value="'.&mt('Delete Photo').'" /> </form><p>
   ');
   
        }         }
        foreach (sort keys %syllabusfields) {  
           if (($syllabus{$_}) || ($allowed)) {   if($allowed) {
               my $message=$syllabus{$_};   $r->print('<form method="post">');
       &Apache::lonfeedback::newline_to_br(\$message);   }
               $message  
              =~s/(http\:\/\/[^\s]+)/\<a href=\"$1\"\>\<tt\>$1\<\/tt\>\<\/a\>/g;   if($target ne 'tex') #print Image
       if ($allowed) {        {
   $message=&Apache::lonspeller::markeduptext($message);   &Apache::lontemplate::start_ContentBox($r);
       }   &Apache::lontemplate::end_ContentBox($r);
       $message=&Apache::lontexconvert::msgtexconverted($message);   $r->print($image);
       if ($target ne 'tex') {  
   $r->print('<h3>'.$syllabusfields{$_}.'</h3><blockquote>'.   }#End Print Image
                             $message.'</blockquote>');  
       } else {   #Print Content eg. Contactinfo aboutme,...
      $r->print('\\\\\textbf{'.$syllabusfields{$_}.'}\\\\'.   &Apache::lontemplate::print_aboutme_content_template($r,$allowed,$target,\%syllabusfields,\%syllabus);
        &Apache::lonxml::xmlparse($r,'tex',$message).'\\\\');          #End Print Content
       }  
               if ($allowed) {         if($target ne 'tex')#Begin Print RSS and portfiles
                  $r->print('<br /><textarea cols="80" rows="6" name="'.$_.'">'.         {
    &HTML::Entities::encode($syllabus{$_},'"&<>').   &print_portfiles_link($r,$is_course);
            '</textarea><input type="submit" name="storesyl" value="'.   if(&Apache::lonrss::advertisefeeds($cnum,$cdom) ne ''){
    &mt('Store').'" />');   &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 ($allowed) {
              if ($env{'form.popup'}) {
                  $r->print('<input type="hidden" name="popup" value="'.
                            $env{'form.popup'}.'" />');
              }
    $r->print('</form>');     $r->print('</form>');
        }         }
        if ($target ne 'tex') {$r->print('<br />');} else {$r->print('\\\\');}         if ($target ne 'tex') {$r->print('<br />');} else {$r->print('\\\\');}
     } else {      } else {
    # &Apache::lontemplate::send_message($r,$cnum,$cdom);
        $r->print('<p>'.&mt('No personal information provided').'.</p>');         $r->print('<p>'.&mt('No personal information provided').'.</p>');
     }      }
       if($target ne 'tex'){
    #$r->print('</blockquote>');
       #$r->print('</div>');
    }
   
     if ($target ne 'tex') {      if ($env{'request.course.id'}
         &print_portfiles_link($r);   && &Apache::lonnet::allowed('srm',$env{'request.course.id'})
     }   && &in_course($cdom,$cnum)) {
    if ($target ne 'tex') {   
     if ($env{'request.course.id'}) {     &Apache::lontemplate::print_start_template($r,&mt('User Notes, Records of Face-To-Face Discussions, and Critical Messages in Course'),'LC_ContentBoxSpecial');
  if (&Apache::lonnet::allowed('srm',$env{'request.course.id'})) {     $r->print('<span class="LC_info">');
     if ($target ne 'tex') {     $r->print(&mt('Shared by course faculty and staff').&Apache::loncommon::help_open_topic("Course_Face_To_Face_Records,Course_Critical_Message"));
  $r->print('<a name="coursecomment" />');   $r->print('</span> <p>');   
  $r->print('<hr /><h3>'.  &Apache::lonmsgdisplay::disfacetoface($r,$cnum,$cdom);
                           &mt('User Notes, Records of Face-To-Face Discussions, and Critical Messages in Course').'</h3>'.     $r->print('</p>');
                           &mt('Shared by course faculty and staff').     &Apache::lontemplate::print_end_template($r);
                           &Apache::loncommon::help_open_topic("Course_Face_To_Face_Records,Course_Critical_Message").      
 '<br />');   } else {
                 &Apache::lonmsgdisplay::disfacetoface($r,$cnum,$cdom);      $r->print('\\\\\textbf{'.&mt('User Notes, Records of Face-To-Face Discussions, and Critical Messages in Course').'}\\\\'.&mt('Shared by course faculty and staff').'\\\\\\\\');
                 $r->print('<hr />');      &Apache::lonmsgdisplay::disfacetoface($r,$cnum,$cdom);
                 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).('&nbsp;'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);  
     }  
         }  
     }      }
       $r->print('</blockquote>');
       $r->print('</div>');
     if ($target ne 'tex') {      if ($target ne 'tex') {
           if ($env{'form.popup'}) {
               $r->print('<p><a href="javascript:window.close()">'.&mt('Close window').'</a>');
           }
  $r->print(&Apache::loncommon::end_page());   $r->print(&Apache::loncommon::end_page());
     } else {      } else {
  $r->print('\end{document}');   $r->print('\end{document}');
     }      }
   
     
   
     return OK;      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 {  sub aboutme_info {
     my ($r) = @_;      my ($r,$is_course) = @_;
     my (undef,undef,$cdom,$cnum)=split(/\//,$r->uri);      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);      return ($cdom,$cnum,$name);
 }  }
   
 sub print_portfiles_link {  sub print_portfiles_link {
     my ($r) = @_;      my ($r,$is_course) = @_;
     my ($cdom,$cnum,$name) = &aboutme_info($r);      my ($cdom,$cnum,$name) = &aboutme_info($r,$is_course);
     my $filecounts = &portfolio_files($r,'showlink');      my $filecounts = &portfolio_files($r,'showlink',undef,$is_course,
                                         $cdom,$cnum,$name);
     my $query_string = &build_query_string();      my $query_string = &build_query_string();
     my $output;      my $output;
       my %lt = &Apache::lonlocal::texthash(
           'vpfi' => 'Viewable portfolio files',
           'vgpf' => 'Viewable group portfolio files',
           'difl' => 'Display file listing',
       );                     
     if ($filecounts->{'both'} > 0) {      if ($filecounts->{'both'} > 0) {
         $output = &mt('<h3>Viewable portfolio files</h3>');   $output = '<div class="LC_ContentBoxSpecial"><h4 class="LC_hcell">';
    $output .= ($is_course?$lt{'vgpf'}:$lt{'vpfi'}).'</h4>';
           
    #$output = '<h4>'.($is_course?$lt{'vgpf'}:$lt{'vpfi'}).'</h4>';
         $output .= '<a href="/adm/'.$cdom.'/'.$cnum.'/aboutme/portfolio'.          $output .= '<a href="/adm/'.$cdom.'/'.$cnum.'/aboutme/portfolio'.
                    $query_string.'">'.&mt('Display file listing').                     $query_string.'">'.$lt{'difl'}.
                    '</a><br /><br />';                     '</a><br /><br />';
         $output .= &mt('A total of [quant,_1,portfolio file] owned by [_2] are available.',$filecounts->{'both'},$name).'<ul>';          if ($filecounts->{'both'} == 1) {
               if ($is_course) {
                   $output .= &mt('One group portfolio file is available.').'<ul>';
               } else {
                   $output .= &mt('One portfolio file owned by [_1] is available.',$name).'<ul>';
               }
           } else {
               if ($is_course) {
                   $output .= &mt('A total of [_1] group portfolio files are available.',$filecounts->{'both'}).'<ul>';
               } else {
                   $output .= &mt('A total of [_1] portfolio files owned by [_2] are available.',$filecounts->{'both'},$name).'<ul>';
               }
           }
         if ($filecounts->{'withoutpass'}) {          if ($filecounts->{'withoutpass'}) {
             $output .= '<li>'.&mt('[quant,_1,file] are publicly accessible.',$filecounts->{'withoutpass'}).'</li>';         $output .= '<li>'.&mt('[quant,_1,file is,files are] publicly accessible.',$filecounts->{'withoutpass'}).'</li>';
         }          }
         if ($filecounts->{'withpass'}) {          if ($filecounts->{'withpass'}) {
             $output .= '<li>'.&mt('[quant,_1,file] require a passphrase for access.',$filecounts->{'withpass'}).'</li>';      $output .= '<li>'.&mt('[quant,_1,file requires,files require] a passphrase for access.',$filecounts->{'withpass'}).'</li>';
         }          }
         $output .= '</ul>';          $output .= '</ul>';
    $output .='</p>';
    $output .='</div>';
     }      }
     $r->print($output);      $r->print($output);
     return;      return;
Line 322  sub build_query_string { Line 545  sub build_query_string {
 }  }
   
 sub display_portfolio_header {  sub display_portfolio_header {
     my ($r) = @_;      my ($r,$is_course) = @_;
     my ($cdom,$cnum,$name) = &aboutme_info($r);      my ($cdom,$cnum,$name) = &aboutme_info($r,$is_course);
     my $query_string = &build_query_string();      my $query_string = &build_query_string();
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     my $forcestudent='';      my $forcestudent='';
     if ($env{'form.forcestudent'}) { $forcestudent='student'; };      if ($env{'form.forcestudent'}) { $forcestudent='student'; };
     my $output =  
         &Apache::loncommon::start_page('Viewable portfolio files',undef,      my $output;
                                             {'function' => $forcestudent,       if ($is_course) {
           $output = 
               &Apache::loncommon::start_page('Viewable group portfolio files',undef,
                                               {'function' => $forcestudent,
                                              'domain'   => $cdom,});                                               'domain'   => $cdom,});
     &Apache::lonhtmlcommon::add_breadcrumb          $output .= '<h3>'.&mt('Group Portfolio files').'</h3>';
         ({href=>"/adm/$cdom/$cnum/aboutme".$query_string,      } else {
           text=>"Personal information - $name",          $output  =
           title=>"Go to personal information page for $name"},              &Apache::loncommon::start_page('Viewable portfolio files',undef,
          {href=>"/adm/$cdom/$cnum/aboutme/portfolio",                                              {'function' => $forcestudent,
           text=>"Viewable files - $name",                                               'domain'   => $cdom,});
           title=>"Viewable portfolio files for $name"}          if (!($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public')) {
 );              &Apache::lonhtmlcommon::add_breadcrumb
     $output .= &Apache::lonhtmlcommon::breadcrumbs(&mt('Viewable portfolio files.'));                  ({href=>"/adm/$cdom/$cnum/aboutme".$query_string,
     $output .= '<h3>'.&mt('Portfolio files for [_1]',$name).'</h3>';                    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.'));
           }
           $output .= '<h3>'.&mt('Portfolio files for [_1]',$name).'</h3>';
       }
     $r->print($output);      $r->print($output);
     return;      return;
 }  }
   
 sub display_portfolio_files {  sub display_portfolio_files {
     my ($r) = @_;      my ($r,$is_course) = @_;
     my ($cdom,$cnum,$name) = &aboutme_info($r);      my ($cdom,$cnum,$name) = &aboutme_info($r,$is_course);
     my %lt = ( withoutpass => 'passphrase not required',      my %lt = &Apache::lonlocal::texthash(
        withpass    => 'passphrase protected',          'withoutpass' => 'passphrase not required',
        both        => 'all access types ',);          'withpass'    => 'passphrase protected',
     %lt = &Apache::lonlocal::texthash(%lt);          'both'        => 'all access types ',
       );
   
     my $portaccess = 'withoutpass';      my $portaccess = 'withoutpass';
     if (exists($env{'form.portaccess'})) {      if (exists($env{'form.portaccess'})) {
Line 367  sub display_portfolio_files { Line 603  sub display_portfolio_files {
         if ($portaccess eq $type) {          if ($portaccess eq $type) {
             $output .= 'selected="selected"';              $output .= 'selected="selected"';
         }          }
         $output .= '>'.&mt($type).'</option>';          $output .= '>'.$lt{$type}.'</option>';
     }      }
     $output .= '</select>'."\n".      $output .= '</select>'."\n".
                '<input type="submit" name="portaccessbutton" value="'.                 '<input type="submit" name="portaccessbutton" value="'.
                &mt('Update display').'" />';                 &mt('Update display').'" />';
     $output .= '</form><br /><br />';      $output .= '</form><br /><br />';
     $r->print($output);      $r->print($output);
     my $filecounts = &portfolio_files($r,'listfiles',\%lt);      my $filecounts = &portfolio_files($r,'listfiles',\%lt,$is_course,
     my $query_string = &build_query_string();                                        $cdom,$cnum,$name);
     $r->print('<br /><br /><a href="/adm/'.$cdom.'/'.$cnum.      if (!($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public')) {
                '/aboutme'.$query_string.'">'.          my $query_string = &build_query_string();
                &mt('Information about [_1]',$name).'</a>');          $r->print('<br /><br /><a href="/adm/'.$cdom.'/'.$cnum.
                     '/aboutme'.$query_string.'">');
           if ($is_course) {
               $r->print(&mt('Course Information page'));
           } else {
               $r->print(&mt('Information about [_1]',$name));
           }
           $r->print('</a>');
       }
     return;      return;
 }  }
   
 sub portfolio_files {  sub portfolio_files {
     my ($r,$mode,$lt) = @_;      my ($r,$mode,$lt,$is_course,$cdom,$cnum,$name) = @_;
     my ($cdom,$cnum,$name) = &aboutme_info($r);  
     my $filecounts = {      my $filecounts = {
                        withpass    => 0,                         withpass    => 0,
                        withoutpass => 0,                         withoutpass => 0,
Line 394  sub portfolio_files { Line 637  sub portfolio_files {
  &Apache::lonnet::get_portfile_permissions($cdom,$cnum);   &Apache::lonnet::get_portfile_permissions($cdom,$cnum);
     my %access_controls =       my %access_controls = 
  &Apache::lonnet::get_access_controls($current_permissions);   &Apache::lonnet::get_access_controls($current_permissions);
     my %allfileshash;  
     my $portaccess;      my $portaccess;
     if ($mode eq 'showlink') {      if ($mode eq 'showlink') {
         $portaccess = 'both';          $portaccess = 'both';
Line 405  sub portfolio_files { Line 647  sub portfolio_files {
         }          }
     }      }
   
     foreach my $filename (keys(%access_controls)) {      my $diroutput;
         my $access_status =       if ($is_course) {
             &Apache::lonnet::get_portfolio_access($cdom,$cnum,$filename,undef,          my %files_by_group;
   $access_controls{$filename});          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 .= '<h3>'.$group.'</h3>'.$grpout.'<br />';
               }
           }
       } 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 '<table class="LC_aboutme_port">';
       }
       sub portfolio_row_start {
    $count++;
    my $class = ($count%2)?'LC_odd_row'
                         :'LC_even_row';
    return '<tr class="'.$class.'">';
       }
   }
   
   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 ($portaccess eq 'both') {
             if (($access_status ne 'ok') &&              if (($access_status ne 'ok') &&
                 ($access_status !~  /^[^:]+:guest_/)) {                  ($access_status !~  /^[^:]+:guest_/)) {
Line 426  sub portfolio_files { Line 721  sub portfolio_files {
         if ($mode eq 'listfiles') {          if ($mode eq 'listfiles') {
             $filename =~ s/^\///;              $filename =~ s/^\///;
             my @pathitems = split('/',$filename);              my @pathitems = split('/',$filename);
             my $lasthash = \%allfileshash;              my $lasthash = $allfileshash;
             while (@pathitems > 1) {              while (@pathitems > 1) {
                 my $newlevel = shift(@pathitems);                  my $newlevel = shift(@pathitems);
                 if (!exists($lasthash->{$newlevel})) {                  if (!exists($lasthash->{$newlevel})) {
Line 444  sub portfolio_files { Line 739  sub portfolio_files {
     }      }
     $filecounts->{'both'} =  $filecounts->{'withoutpass'} +      $filecounts->{'both'} =  $filecounts->{'withoutpass'} +
                               $filecounts->{'withpass'};                                $filecounts->{'withpass'};
       my $output;
     if ($mode eq 'listfiles') {      if ($mode eq 'listfiles') {
         my $output;          if ($filecounts->{'both'} > 0) {
         if (keys(%allfileshash) > 0) {  
             $output = &portfolio_table_start();              $output = &portfolio_table_start();
             $output .= &parse_directory($r,0,\%allfileshash,'');              $output .= &parse_directory($r,0,$allfileshash,'',$is_course,
                                           $group);
             $output .= '</table>';              $output .= '</table>';
         } 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 '<table class="LC_aboutme_port">';  
     }  
     sub portfolio_row_start {  
  $count++;  
  my $class = ($count%2)?'LC_odd_row'  
                       :'LC_even_row';  
  return '<tr class="'.$class.'">';  
     }      }
       return $output;
 }  }
   
 sub parse_directory {  sub parse_directory {
     my ($r,$depth,$currhash,$path) = @_;      my ($r,$depth,$currhash,$path,$is_course,$group) = @_;
     my ($cdom,$cnum,$name) = &aboutme_info($r);      my ($cdom,$cnum,$name) = &aboutme_info($r,$is_course);
     $depth++;      $depth++;
     my $output;      my $output;
   
     my $portfolio_root =  &Apache::portfolio::get_portfolio_root($cdom,$cnum);       my $portfolio_root = &Apache::portfolio::get_portfolio_root($cdom,$cnum,
                                                                   $group);
       my $getpropath = 1;
     my %dirlist = map {      my %dirlist = map {
     ((split('&',$_,2))[0],1)      ((split('&',$_,2))[0],1)
  } &Apache::lonnet::dirlist($path,$cdom,$cnum,$portfolio_root);   } &Apache::lonnet::dirlist($portfolio_root.$path,$cdom,$cnum,$getpropath);
     foreach my $item (sort(keys(%{$currhash}))) {      foreach my $item (sort(keys(%{$currhash}))) {
         $output .= &portfolio_row_start();          $output .= &portfolio_row_start();
         $output .= '<td style="padding-left: '.($depth*25).'px">';          $output .= '<td style="padding-left: '.($depth*25).'px">';
Line 494  sub parse_directory { Line 771  sub parse_directory {
             $output .= '<img src="'.&Apache::loncommon::lonhttpdurl("/adm/lonIcons/navmap.folder.open.gif").'" alt="'.&mt('Folder').' '.$title.'" class="LC_icon" />&nbsp;'.$title;              $output .= '<img src="'.&Apache::loncommon::lonhttpdurl("/adm/lonIcons/navmap.folder.open.gif").'" alt="'.&mt('Folder').' '.$title.'" class="LC_icon" />&nbsp;'.$title;
     $output .= '</td><td></td></tr>';      $output .= '</td><td></td></tr>';
             $output .= &parse_directory($r,$depth,$currhash->{$item},              $output .= &parse_directory($r,$depth,$currhash->{$item},
  $path.'/'.$item);   $path.'/'.$item,$is_course,$group);
         } else {          } else {
      
   
     my $file_name;       my $file_name; 
     if ($currhash->{$item} =~ m|/([^/]+)$|) {      if ($currhash->{$item} =~ m|/([^/]+)$|) {
  $file_name = $1;   $file_name = $1;
Line 505  sub parse_directory { Line 780  sub parse_directory {
  $file_name = $currhash->{$item};   $file_name = $currhash->{$item};
     }      }
     my $have_meta = exists($dirlist{$file_name.'.meta'});      my $have_meta = exists($dirlist{$file_name.'.meta'});
     my $url = '/uploaded/'.$cdom.'/'.$cnum.'/portfolio/'.              my $url;
  $currhash->{$item};              if ($is_course) {
                   $url = '/uploaded/'.$cdom.'/'.$cnum.'/groups/'.$group.
                          '/portfolio/'.$currhash->{$item};
               } else { 
           $url = '/uploaded/'.$cdom.'/'.$cnum.'/portfolio/'.
          $currhash->{$item};
               }
             my $showname;              my $showname;
     if ($have_meta) {      if ($have_meta) {
  $showname = &Apache::lonnet::metadata($url,'title');   $showname = &Apache::lonnet::metadata($url,'title');
Line 524  sub parse_directory { Line 804  sub parse_directory {
  '&nbsp;'.$showname.'</a>';   '&nbsp;'.$showname.'</a>';
     $output.='</td><td>';      $output.='</td><td>';
     if ($have_meta) {      if ($have_meta) {
  $output.= '<a href="'.$url.'.meta"><img alt="'.&mt('Catalog Information').'" src="'.   $output.= '<a href="'.$url.'.meta"><img alt="'.&mt('Metadata').'" src="'.
  &Apache::loncommon::lonhttpdurl('/res/adm/pages/catalog.gif').   &Apache::loncommon::lonhttpdurl('/res/adm/pages/catalog.gif').
  '" class="LC_icon" /></a>';   '" class="LC_icon" /></a>';
     }      }
Line 534  sub parse_directory { Line 814  sub parse_directory {
     return $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;  1;
 __END__  __END__

Removed from v.1.52  
changed lines
  Added in v.1.118


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
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.