Diff for /loncom/interface/lonaboutme.pm between versions 1.18 and 1.50

version 1.18, 2003/10/04 20:49:40 version 1.50, 2006/08/07 19:51:54
Line 34  use Apache::loncommon; Line 34  use Apache::loncommon;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::lontexconvert;  use Apache::lontexconvert;
 use Apache::lonfeedback;  use Apache::lonfeedback;
   use Apache::lonrss();
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonmsgdisplay();
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
     return OK if $r->header_only;      return OK if $r->header_only;
       my $target=$env{'form.grade_target'};
 # ------------------------------------------------------------ Print the screen  # ------------------------------------------------------------ Print the screen
     $r->print(<<ENDDOCUMENT);      if ($target eq 'tex') {
 <html>   $r->print(&Apache::lonprintout::print_latex_header($env{'form.latex_type'}));
 <head>      }
 <title>The LearningOnline Network with CAPA</title>      my (undef,undef,$cdom,$cnum,undef,$action)=split(/\//,$r->uri);
 ENDDOCUMENT  
     my (undef,undef,$cdom,$cnum)=split(/\//,$r->uri);  
 # 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') {
  $r->print('</head><body>'.   &Apache::loncommon::simple_error_page($r,'No info',
   &mt('No user information available').'</body></html>');        'No user information available');
         return OK;          return OK;
     }      }
 # --------------------------------------------------------- The syllabus fields  # --------------------------------------------------------- The syllabus fields
Line 62  ENDDOCUMENT Line 62  ENDDOCUMENT
        'ccc_webreferences' => 'Web References');         'ccc_webreferences' => 'Web References');
   
 # ------------------------------------------------------------ Get Query String  # ------------------------------------------------------------ Get Query String
     &Apache::loncommon::get_unprocessed_cgi      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                             ($ENV{'QUERY_STRING'},['forcestudent','register']);      ['forceedit','forcestudent',
 # ----------------------------------------------------- Force menu registration       'register']);
     my $addentries='';  
     if ($ENV{'form.register'}) {  # ----------------------------------------------- Available Portfolio file display 
        $addentries=' onLoad="'.&Apache::lonmenu::loadevents().      if (($target ne 'tex') && ($action eq 'portfolio')) {
    '" onUnload="'.&Apache::lonmenu::unloadevents().'"';          &display_portfolio_header($r);
        $r->print(&Apache::lonmenu::registerurl(1));          &display_portfolio_files($r);
           $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'; };
   
       my $forceregister = '';
       if ($forcestudent eq '') {
           $forceregister = $env{'form.register'};
       }
                 
 # --------------------------------------- There is such a user, get environment  # --------------------------------------- There is such a user, get environment
     my %courseenv=&Apache::lonnet::dump('environment',$cdom,$cnum);      my %courseenv=&Apache::lonnet::dump('environment',$cdom,$cnum);
     $r->print('</head>'.&Apache::loncommon::bodytag      if ($target ne 'tex') {
                   ("Personal Information",$forcestudent,$addentries,'',$cdom,   my $start_page = 
                    $ENV{'form.register'}));      &Apache::loncommon::start_page("Personal Information",undef,
     $r->print('<h1>'.&Apache::loncommon::plainname($cnum,$cdom).'</h1>');     {'function'       => $forcestudent,
        'domain'         => $cdom,
       'force_register' =>
               $forceregister,});
    $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'}) {      if ($courseenv{'nickname'}) {
        $r->print(         $r->print(
          '<h2>&quot;'.$courseenv{'nickname'}.           '<h2>&quot;'.$courseenv{'nickname'}.
          '&quot;</h2>');           '&quot;</h2>');
     }      }
     $r->print('<h3>'.$Apache::lonnet::domaindescription{$cdom}.'</h3>'.      if ($target ne 'tex') {
     '<p>'.&Apache::loncommon::messagewrapper('Send me a message',$cnum,$cdom).   $r->print('<h3>'.$Apache::lonnet::domaindescription{$cdom}.'</h3>'.
     '</p>');    '<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 %syllabus=&Apache::lonnet::dump('aboutme',$cdom,$cnum);
     my $allowed=0;      my $allowed=0;
   
 # does this user have privileges to post, etc?  # does this user have privileges to post, etc?
   
        $allowed=(($ENV{'user.name'} eq $cnum) &&          my $privleged=$allowed=(($env{'user.name'} eq $cnum) && 
  ($ENV{'user.domain'} eq $cdom));         ($env{'user.domain'} eq $cdom));
        if ($forcestudent) { $allowed=0; }         if ($forcestudent or $target eq 'tex') { $allowed=0; }
     
        if ($allowed) {         if ($allowed) {
           $r->print('<p><b>'.&mt('Privacy Note').':</b> '.             my $query_string = &build_query_string({'forcestudent' => '1',});
 &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.').     $r->print('<p><b>'.&mt('Privacy Note').':</b> '.
 '</p>'.       &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').'</p><p><a href="'.$r->uri.'?forcestudent=1">Show Public View</a>'.       '</p>'.
  &Apache::loncommon::help_open_topic('Uploaded_Templates_PublicView').'</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>');
       if (($ENV{'form.uploaddoc.filename'}) &&         } elsif ($privleged && $target ne 'tex') {
           ($ENV{'form.storeupl'}) && ($allowed)) {             my $query_string = &build_query_string({'forceedit' => '1',});
    if ($ENV{'form.uploaddoc.filename'}=~/\.(gif|jpg|png|jpeg)$/i) {     $r->print('<p><a href="'.$r->uri.$query_string.'"><font size="+1">'.
              $syllabus{'uploaded.photourl'}=       &mt('Edit').'</font></a></p>');
                  &Apache::lonnet::userfileupload('uploaddoc');         }
         if (($env{'form.uploaddoc.filename'}) &&
             ($env{'form.storeupl'}) && ($allowed)) {
      if ($env{'form.uploaddoc.filename'}=~/\.(gif|jpg|png|jpeg)$/i) {
         if ($syllabus{'uploaded.photourl'}) {
     &Apache::lonnet::removeuploadedurl($syllabus{'uploaded.photourl'});
         }
         $syllabus{'uploaded.photourl'}=
                    &Apache::lonnet::userfileupload('uploaddoc',undef,'aboutme');
    }     }
           $syllabus{'uploaded.lastmodified'}=time;            $syllabus{'uploaded.lastmodified'}=time;
           &Apache::lonnet::put('aboutme',\%syllabus,$cdom,$cnum);            &Apache::lonnet::put('aboutme',\%syllabus,$cdom,$cnum);
        }         }
        if (($allowed) && ($ENV{'form.storesyl'})) {      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 (keys %syllabusfields) {     foreach (keys %syllabusfields) {
                my $field=$ENV{'form.'.$_};                 my $field=$env{'form.'.$_};
                $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{$_}=$field;
            }             }
            $syllabus{'uploaded.lastmodified'}=time;             $syllabus{'uploaded.lastmodified'}=time;
Line 132  ENDDOCUMENT Line 166  ENDDOCUMENT
        $lastmod=($lastmod?&Apache::lonlocal::locallocaltime($lastmod):&mt('never'));         $lastmod=($lastmod?&Apache::lonlocal::locallocaltime($lastmod):&mt('never'));
        $r->print(&mt('Last updated').': '.$lastmod);         $r->print(&mt('Last updated').': '.$lastmod);
        if ($syllabus{'uploaded.photourl'}) {         if ($syllabus{'uploaded.photourl'}) {
    $r->print('<img src="'.     &Apache::lonnet::allowuploaded('/adm/aboutme',
              &Apache::lonnet::tokenwrapper($syllabus{'uploaded.photourl'}).    $syllabus{'uploaded.photourl'});
              '" align="right" />');     my $image=
                  qq{<img src="$syllabus{'uploaded.photourl'}" align="right" />};
      if ($target eq 'tex') {
          $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="Upload">'.
  '</form><form method="post">');   '</form><form method="post">');
   
        }         }
        foreach (sort keys %syllabusfields) {         foreach (sort keys %syllabusfields) {
           if (($syllabus{$_}) || ($allowed)) {            if (($syllabus{$_}) || ($allowed)) {
               my $message=$syllabus{$_};                my $message=$syllabus{$_};
               $message=~s/\n/\<br \/\>/g;        &Apache::lonfeedback::newline_to_br(\$message);
               $message                $message
              =~s/(http\:\/\/[^\s]+)/\<a href=\"$1\"\>\<tt\>$1\<\/tt\>\<\/a\>/g;               =~s/(http\:\/\/[^\s]+)/\<a href=\"$1\"\>\<tt\>$1\<\/tt\>\<\/a\>/g;
         if ($allowed) {
     $message=&Apache::lonspeller::markeduptext($message);
         }
       $message=&Apache::lontexconvert::msgtexconverted($message);        $message=&Apache::lontexconvert::msgtexconverted($message);
               $r->print('<h3>'.$syllabusfields{$_}.'</h3><blockquote>'.        if ($target ne 'tex') {
                         $message.'</blockquote>');    $r->print('<h3>'.$syllabusfields{$_}.'</h3><blockquote>'.
                               $message.'</blockquote>');
         } else {
        $r->print('\\\\\textbf{'.$syllabusfields{$_}.'}\\\\'.
          &Apache::lonxml::xmlparse($r,'tex',$message).'\\\\');
         }
               if ($allowed) {                if ($allowed) {
                  $r->print('<br /><textarea cols="80" rows="6" name="'.$_.'">'.                   $r->print('<br /><textarea cols="80" rows="6" name="'.$_.'">'.
    $syllabus{$_}.     $syllabus{$_}.
Line 164  ENDDOCUMENT Line 215  ENDDOCUMENT
        if ($allowed) {         if ($allowed) {
    $r->print('</form>');     $r->print('</form>');
        }         }
        $r->print('</p>');         if ($target ne 'tex') {$r->print('<br />');} else {$r->print('\\\\');}
     } else {      } else {
        $r->print('<p>'.&mt('No personal information provided').'.</p>');         $r->print('<p>'.&mt('No personal information provided').'.</p>');
     }      }
     if ($ENV{'request.course.id'}) {  
  if (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {      if ($target ne 'tex') {
             $r->print('<hr /><h3>'.          &print_portfiles_link($r);
 &mt('User Notes, Records of Face-To-Face Discussions, and Critical Messages in Course').'</h3>'.      }
 &mt('Shared by course faculty and staff').'<br />');  
     &Apache::lonmsg::disfacetoface($r,$cnum,$cdom);      if ($env{'request.course.id'}) {
             $r->print(&Apache::loncommon::noteswrapper('Add Records',$cnum,$cdom));   if (&Apache::lonnet::allowed('srm',$env{'request.course.id'})) {
       if ($target ne 'tex') {
    $r->print('<a name="coursecomment" />');
    $r->print('<hr /><h3>'.
                             &mt('User Notes, Records of Face-To-Face Discussions, and Critical Messages in Course').'</h3>'.
                             &mt('Shared by course faculty and staff').
                             &Apache::loncommon::help_open_topic("Course_Face_To_Face_Records,Course_Critical_Message").
   '<br />');
                   &Apache::lonmsgdisplay::disfacetoface($r,$cnum,$cdom);
                   $r->print('<hr />');
                   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('</body></html>');      if ($target ne 'tex') {
    $r->print(&Apache::loncommon::end_page());
       } else {
    $r->print('\end{document}');
       }
     return OK;      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('<h3>Viewable portfolio files</h3>');
           $output .= '<a href="/adm/'.$cdom.'/'.$cnum.'/aboutme/portfolio'.
                      $query_string.'">'.&mt('Display file listing').
                      '</a><br /><br />';
           $output .= &mt('A total of [quant,_1,portfolio file] owned by [_2] are available.',$filecounts->{'both'},$name).'<ul>';
           if ($filecounts->{'withoutpass'}) {
               $output .= '<li>'.&mt('[quant,_1,file] are publicly accessible.',$filecounts->{'withoutpass'}).'</li>';   
           }
           if ($filecounts->{'withpass'}) {
               $output .= '<li>'.&mt('[quant,_1,file] require a passphrase for access.',$filecounts->{'withpass'}).'</li>';
           }
           $output .= '</ul>';
       }
       $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 .= '&amp;'.$element.'='.$env{'form.'.$element};
               }
           }
       }
       if ($new) {
           foreach my $key (keys(%{$new_items})) {
               $query_string .= '&amp;'.$key.'='.$new_items->{$key};
           }
       }
       $query_string =~ s/^\&amp;/\?/;
       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 .= '<h3>'.&mt('Portfolio files for [_1]',$name).'</h3>';
       $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 = '<form action="'.&HTML::Entities::encode($r->uri,'<>&"')
    .'" name="displaystatus" method="post">'.
    &mt('File access type: ').'<select name="portaccess">';
       foreach my $type ('withoutpass','withpass','both') {
           $output .= '<option value="'.$type.'" ';
           if ($portaccess eq $type) {
               $output .= 'selected="selected"';
           }
           $output .= '>'.&mt($type).'</option>';
       }
       $output .= '</select>'."\n".
                  '<input type="submit" name="portaccessbutton" value="'.
                  &mt('Update display').'" />';
       $output .= '</form><br /><br />';
       $r->print($output);
       my $filecounts = &portfolio_files($r,'listfiles',\%lt);
       my $query_string = &build_query_string();
       $r->print('<br /><br /><a href="/adm/'.$cdom.'/'.$cnum.
                  '/aboutme'.$query_string.'">'.
                  &mt('Information about [_1]',$name).'</a>');
       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 .= '</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.'">';
       }
   }
   
   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);
       foreach my $item (sort(keys(%{$currhash}))) {
           $output .= &portfolio_row_start();
           $output .= '<td style="padding-left: '.($depth*25).'px">';
           if (ref($currhash->{$item}) eq 'HASH') {
               my $title=&HTML::Entities::encode($item,'<>&"');
               $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 .= &parse_directory($r,$depth,$currhash->{$item},
    $path.'/'.$item);
           } 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 $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.')';
       }
   
               $showname=&HTML::Entities::encode($showname,'<>&"');
               $output .= '<a href="'.$url.'">'.
    '<img alt="" src="'.&Apache::loncommon::icon($currhash->{$item}).'" class="LC_icon" />'.
    '&nbsp;'.$showname.'</a>';
       $output.='</td><td>';
       &Apache::lonnet::logthis("sh $showname");
       if ($have_meta) {
    $output.= '<a href="'.$url.'.meta"><img alt="'.&mt('Catalog Information').'" src="'.
    &Apache::loncommon::lonhttpdurl('/res/adm/pages/catalog.gif').
    '" class="LC_icon" /></a>';
       }
       $output .= '</td></tr>';
           }
       }
       return $output;
   }
   
 1;  1;
 __END__  __END__

Removed from v.1.18  
changed lines
  Added in v.1.50


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.