Diff for /loncom/homework/outputtags.pm between versions 1.21 and 1.55

version 1.21, 2002/10/16 20:42:22 version 1.55, 2009/05/14 10:57:40
Line 26 Line 26
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
   
   
   
 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'));      &Apache::lonxml::register('Apache::outputtags',('displayduedate','displaytitle','displayweight','displaystudentphoto'));
 }  }
   
 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 = undef;
 #    $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::lonhomework::due_date($id);
  &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) {
       my $duetext = &Apache::lonnavmaps::timeToHumanString($date, '', $format);
       if ($target eq 'web') {
    if (lc($style) !~ 'plain') { 
       $result ='<table border="on"><tr><td>Due '.$duetext.'</td></tr></table>';
    } else {
       $result=&mt('Due').' '.$duetext;
    }
       } elsif ($target eq 'tex') {
    # For TeX we'll make the duedate tag work exactly like the 
    # duedate tag for web.
   
    my $duetext = &Apache::lonnavmaps::timeToHumanString($date, '', $format);
    if (lc($style) !~ 'plain') {
       # The due date will be put in a box.
       # at the start of the line to ensure it won't overlap
       # the 1 col boundary.
   
       $result = '\\\\ \framebox{'
             .&mt('Due').' '.$duetext.'}';
    } else {
       $result = &mt('Due') . ' '.$duetext;
    }
       }
    }
        
       } 
       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 141  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') {      } 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 109  sub end_displaytitle { Line 168  sub end_displaytitle {
     return @result;      return @result;
 }  }
   
   sub multipart {
       my ($uri)=@_;
       if (!defined($uri)) { $uri=$env{'request.uri'}; }
       my ($symb)=&Apache::lonnet::whichuser();
   
       my @parts;
       my $metadata = &Apache::lonnet::metadata($uri,'packages');
       foreach (split(/\,/,$metadata)) {
    if ($_ =~ /^part_(.*)$/) {
       my $part = $1;
       if ($part ne '0' 
    && !&Apache::loncommon::check_if_partid_hidden($part, 
          $symb)) {
    push(@parts,$part);
       }
    }
       }
       return @parts;
   }
   
   sub start_displayweight {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
       my $result;
       if (exists($Apache::outputtags::showonce{'displayweight'})) {
    if(grep(/^\Q$Apache::inputtags::part\E$/,
    @{$Apache::outputtags::showonce{'displayweight'}})) {
       return '';
    }
       }
       push(@{$Apache::outputtags::showonce{'displayweight'}},
    $Apache::inputtags::part);
       if ($target eq 'web' || $target eq 'tex') {
    my $id = $Apache::inputtags::part;
    if ($id ne '0') {
       my $weight = &Apache::lonnet::EXT("resource.$id.weight");
       if (!defined($weight) || ($weight eq '')) { $weight=1; }
       $result.=$weight;
    } else {
       my @parts=&multipart($env{'request.uri'});
       my $weight;
       if (@parts) {
           foreach my $part (@parts) {
       my $pweight=&Apache::lonnet::EXT("resource.$part.weight");
       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;
    }
       } elsif ( $target eq 'edit' ) {
    $result=&Apache::edit::tag_start($target,$token);
    $result.='</td></tr>';
    $result.=&Apache::edit::end_table();
       }
       return $result;
   }
   
   sub end_displayweight {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
       my @result;
       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::lonnet::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;
   }
   
 1;  1;
 __END__  __END__
   
   
   =head1 NAME
   
   Apache::outputtags;
   
   =head1 SYNOPSIS
   
   Handles tags associated with output. Seems to
   relate to due dates of the assignment.
   
   This is part of the LearningOnline Network with CAPA project
   described at http://www.lon-capa.org.
   
   =head1 SUBROUTINES
   
   =over
   
   =item start_displayduedate()
   
   =item initialize_outputtags()
   
   Empties the hash of tags that have already been displayed that should only be displayed once.
   
   =item end_displayduedate()
   
   =item start_displaytitle()
   
   =item end_displaytitle()
   
   =item multipart()
   
   =item start_displayweight()
   
   =item end_displayweight()
   
   =item start_displaystudentphoto()
   
   =item end_displaystudentphoto()
   
   
   =back
   
   =cut

Removed from v.1.21  
changed lines
  Added in v.1.55


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.