Diff for /loncom/homework/outputtags.pm between versions 1.29 and 1.43

version 1.29, 2003/05/03 21:09:03 version 1.43, 2005/11/08 12:00:22
Line 29 Line 29
 package Apache::outputtags;   package Apache::outputtags; 
   
 use strict;  use strict;
   use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
 use POSIX qw(strftime);  use POSIX qw(strftime);
   
 BEGIN {  BEGIN {
     &Apache::lonxml::register('Apache::outputtags',('displayduedate','displaytitle','displayweight'));      &Apache::lonxml::register('Apache::outputtags',('displayduedate','displaytitle','displayweight','displaystudentphoto'));
 }  }
   #  Empties the hash of tags that have already been displayed
   #  that should only be displayed once.
   #
 sub initialize_outputtags {  sub initialize_outputtags {
     %Apache::outputtags::showonce=();      %Apache::outputtags::showonce=();
 }  }
   
   
 sub start_displayduedate {  sub start_displayduedate {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $result;      my $result;
   
       # Different parts can have different due dates... so we keep a list
       # of the parts for which we've displayed the duedate:
   
     if (exists($Apache::outputtags::showonce{'displayduedate'})) {      if (exists($Apache::outputtags::showonce{'displayduedate'})) {
  return '';   if (grep(/^\Q$Apache::inputtags::part\E$/,
     } else {   @{$Apache::outputtags::showonce{'displayduedate'}})) {
  $Apache::outputtags::showonce{'displayduedate'}=1;      return ''; # Already shown the duedate for this part.
    }
     }      }
       # since we will show the duedate for this part, remember it.
   
       push (@{$Apache::outputtags::showonce{'displayduedate'}},
     $Apache::inputtags::part);
   
       #  Determine the due date format:
       #
     my $status=$Apache::inputtags::status['-1'];      my $status=$Apache::inputtags::status['-1'];
     &Apache::lonxml::debug("got a $status in duedatebox");      &Apache::lonxml::debug("got a $status in duedatebox");
     if (($status =~ /CAN.*_ANSWER/) && ($target eq 'web')) {      my $style = &Apache::lonxml::get_param('style',$parstack,$safeeval);
 # my $format = &Apache::lonxml::get_param('format',$parstack,$safeeval);      my $format = &Apache::lonxml::get_param('format', $parstack, $safeeval);
 # if ($format eq '') {      if (!$format) {
 #    &Apache::lonxml::debug("using default format");   $format = '%c';
 #    $format="%c";      }
 # }      if (($status =~ /CAN.*_ANSWER/)) {
  my $id = $Apache::inputtags::part;   my $id = $Apache::inputtags::part;
  my $date = &Apache::lonnet::EXT("resource.$id.duedate");   my $date = &Apache::lonnet::EXT("resource.$id.duedate");
  &Apache::lonxml::debug("duedatebox found $date for $id");   &Apache::lonxml::debug("duedatebox found $date for $id");
  $result ='<table border="on"><tr><td>Due '.  
     &Apache::lonnavmaps::timeToHumanString($date).   # Only show the due date if the current date is 
  '</td></tr></table>';   # different from due date of the previous part.  I think
 #        } else {   # this is probably the best way to avoid due date clutter.
 #    $result ='<table border="on"><tr><td>No due date set.</td></tr></table>';  
 # }          my $showduedate = 1;
     } elsif ( $target eq 'edit' ) {   my $part_count  = scalar(@{$Apache::outputtags::showonce{'displayduedate'}});
    if ($part_count > 1) {
       my $prev_part_id = $Apache::outputtags::showonce{'displayduedate'}->[$part_count-2];
       my $prev_due_date = &Apache::lonnet::EXT("resource.$prev_part_id.duedate");
       if ($prev_due_date == $date) {
    $showduedate = 0;
       }
    }
   
    if ($showduedate) {
       if ($target eq 'web') {
    if (lc($style) !~ 'plain') { 
       $result ='<table border="on"><tr><td>Due '.
    &Apache::lonnavmaps::timeToHumanString($date,'', $format).
    '</td></tr></table>';
    } else {
       $result=&mt('Due').' '.&Apache::lonnavmaps::timeToHumanString($date);
    }
       } elsif ($target eq 'tex') {
       }
    }
        
       } 
       if ( $target eq 'edit' ) {
  $result=&Apache::edit::tag_start($target,$token);   $result=&Apache::edit::tag_start($target,$token);
  $result.='</td></tr>';   $result.='</td></tr>';
  $result.=&Apache::edit::end_table();   $result.=&Apache::edit::end_table();
   
     }      }
     return $result;      return $result;
 }  }
Line 88  sub start_displaytitle { Line 128  sub start_displaytitle {
     } else {      } else {
  $Apache::outputtags::showonce{'displayduetitle'}=1;   $Apache::outputtags::showonce{'displayduetitle'}=1;
     }      }
       my $name=&Apache::structuretags::get_resource_name();
       my $style = &Apache::lonxml::get_param('style',$parstack,$safeeval);
     if ($target eq 'web') {      if ($target eq 'web') {
  $result="<h1>$Apache::lonhomework::name</h1>";   $result=$name;
    if (lc($style) !~ 'plain') { $result="<h1>$name</h1>"; }
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result=&Apache::edit::tag_start($target,$token);   $result=&Apache::edit::tag_start($target,$token);
  $result.='</td></tr>';   $result.='</td></tr>';
  $result.=&Apache::edit::end_table();   $result.=&Apache::edit::end_table();
     } elsif ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') {      } elsif ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') {
  $Apache::lonhomework::name=~s/%/\%/g;   $name=&Apache::lonxml::latex_special_symbols($name);
  $Apache::lonhomework::name=~s/&/\&/g;   if (lc($style) !~ 'plain') { 
  $result='\vskip 0 mm\noindent\textbf{'.$Apache::lonhomework::name.'}\vskip 0 mm';      $result='\vskip 0 mm\noindent\textbf{'.$name.'}\vskip 0 mm';
    } else {
       $result=$name;
    }
     }      }
     return $result;      return $result;
 }  }
Line 111  sub end_displaytitle { Line 157  sub end_displaytitle {
   
 sub multipart {  sub multipart {
     my ($uri)=@_;      my ($uri)=@_;
     if (!defined($uri)) { $uri=$ENV{'request.uri'}; }      if (!defined($uri)) { $uri=$env{'request.uri'}; }
     my @parts;      my @parts;
     my $metadata = &Apache::lonnet::metadata($uri,'packages');      my $metadata = &Apache::lonnet::metadata($uri,'packages');
     foreach (split(/\,/,$metadata)) {      foreach (split(/\,/,$metadata)) {
Line 134  sub start_displayweight { Line 180  sub start_displayweight {
     }      }
     push(@{$Apache::outputtags::showonce{'displayweight'}},      push(@{$Apache::outputtags::showonce{'displayweight'}},
  $Apache::inputtags::part);   $Apache::inputtags::part);
     my $status=$Apache::inputtags::status['-1'];  
     if ($target eq 'web' || $target eq 'tex') {      if ($target eq 'web' || $target eq 'tex') {
  my $id = $Apache::inputtags::part;   my $id = $Apache::inputtags::part;
  if ($id ne '0') {   if ($id ne '0') {
Line 142  sub start_displayweight { Line 187  sub start_displayweight {
     if (!defined($weight) || ($weight eq '')) { $weight=1; }      if (!defined($weight) || ($weight eq '')) { $weight=1; }
     $result.=$weight;      $result.=$weight;
  } else {   } else {
     my @parts=&multipart($ENV{'request.uri'});      my @parts=&multipart($env{'request.uri'});
     my $weight;      my $weight;
     foreach my $part (@parts) {      if (@parts) {
  my $pweight=&Apache::lonnet::EXT("resource.$part.weight");          foreach my $part (@parts) {
  if (!defined($pweight) || ($pweight eq '')) { $pweight=1; }      my $pweight=&Apache::lonnet::EXT("resource.$part.weight");
  $weight+=$pweight;      if (!defined($pweight) || ($pweight eq '')) { $pweight=1; }
       $weight+=$pweight;
           }
       } else {
    $weight = &Apache::lonnet::EXT("resource.$id.weight");
                   if (!defined($weight) || ($weight eq '')) { $weight=1; }
     }      }
     $result=$weight;      $result=$weight;
  }   }
Line 163  sub end_displayweight { Line 213  sub end_displayweight {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my @result;      my @result;
     if ($target eq 'edit') { $result[1]='no'; }      if ($target eq 'edit') { $result[1]='no'; }
       return @result;
   }
   
   sub start_displaystudentphoto {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
       my $result;
       my (undef,undef,$domain,$user) = &Apache::lonxml::whichuser();
       if ($target eq 'web' && $user eq $env{'user.name'}) {
    my $url=&Apache::lonnet::studentphoto($domain,$user,"gif");
    my $args;
    my $width=&Apache::lonxml::get_param('width',$parstack,$safeeval);
    if ($width) { $args.=" width=\"$width\" "; }
    my $height=&Apache::lonxml::get_param('heigth',$parstack,$safeeval);
    if ($height) { $args.=" height=\"$height\" "; }
    my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval);
    if ($align) { $args.=" align=\"$align\" "; }
    $result.=" <img $args src=\"$url\" alt=\"$user\@$domain\" />";
       }
       if ($target eq 'tex' && $env{'request.role'} =~ /^cc/) {
    my $url=&Apache::lonnet::studentphoto($domain,$user,"eps");
    my $ua=new LWP::UserAgent;
    my $request=new HTTP::Request('GET',$url);
    my $response=$ua->request($request);
    if ($response->is_success) {
       my $file=$user."_".$domain."_studentphoto.eps";
       open(FILE,">".$Apache::lonnet::perlvar{'lonPrtDir'}."/$file");
       print FILE $response->content;
       close(FILE);
       my $width_param=&Apache::londefdef::image_size($Apache::lonnet::perlvar{'lonPrtDir'}."/$file",'0.3',$parstack,$safeeval);
       $result.=' \graphicspath{{'.$Apache::lonnet::perlvar{'lonPrtDir'}.
    '}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
    } else {
       $result="$user\@$domain";
    }
       }
       return $result;
   }
   
   sub end_displaystudentphoto {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
       my @result;
       if ($target eq 'edit') { $result[1]='no'; }
     return @result;      return @result;
 }  }
   

Removed from v.1.29  
changed lines
  Added in v.1.43


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.