Diff for /loncom/homework/structuretags.pm between versions 1.384 and 1.397

version 1.384, 2007/07/23 23:30:47 version 1.397, 2007/09/11 23:53:05
Line 42  use lib '/home/httpd/lib/perl/'; Line 42  use lib '/home/httpd/lib/perl/';
 use LONCAPA;  use LONCAPA;
     
 BEGIN {  BEGIN {
     &Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startouttext','endouttext','simpleeditbutton','definetag'));      &Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startouttext','endouttext','simpleeditbutton','definetag'));
 }  }
   
 sub start_web {  sub start_web {
Line 157  function setSubmittedPart (part) { Line 157  function setSubmittedPart (part) {
  $body_args{'no_title'}       = 1;   $body_args{'no_title'}       = 1;
  $body_args{'force_register'} = 1;   $body_args{'force_register'} = 1;
  $body_args{'add_entries'}    = \%add_entries;   $body_args{'add_entries'}    = \%add_entries;
    if ($env{'environment.remote'} eq 'off'
       && $env{'request.state'} eq   'construct') {
       $body_args{'only_body'}  = 1;
    }
     }      }
     $body_args{'no_auto_mt_title'} = 1;      $body_args{'no_auto_mt_title'} = 1;
     my $page_start = &Apache::loncommon::start_page($name,$extra_head,      my $page_start = &Apache::loncommon::start_page($name,$extra_head,
Line 202  function setSubmittedPart (part) { Line 206  function setSubmittedPart (part) {
 #use Time::HiRes();  #use Time::HiRes();
 sub get_resource_name {  sub get_resource_name {
     my ($parstack,$safeeval)=@_;      my ($parstack,$safeeval)=@_;
       my $name;
     if (defined($Apache::lonhomework::name)) {      if (defined($Apache::lonhomework::name)) {
  return $Apache::lonhomework::name;   $name = $Apache::lonhomework::name;
     }      } else {
     my ($symb)=&Apache::lonnet::whichuser();   my ($symb)=&Apache::lonnet::whichuser();
     my $name=&Apache::lonnet::gettitle($symb);   $name=&Apache::lonnet::gettitle($symb);
     if ($name eq '') {   if ($name eq '') {
  $name=&Apache::lonnet::EXT('resource.title');      $name=&Apache::lonnet::EXT('resource.title');
  if ($name eq 'con_lost') { $name = ''; }      if ($name eq 'con_lost') { $name = ''; }
     }   }
     if ($name!~/\S+/) {   if ($name!~/\S+/) {
  $name=$env{'request.uri'};      $name=$env{'request.uri'};
  $name=~s-.*/([^/]+)$-$1-;      $name=~s-.*/([^/]+)$-$1-;
    }
    # The name has had html tags escaped:
          
    $name=~s/&lt;/</gs;
    $name=~s/&gt;/>/gs;
   
    $Apache::lonhomework::name=$name;
     }      }
     $Apache::lonhomework::name=$name;  
     return $name;      return $name;
 }  }
   
Line 319  sub problem_web_to_edit_header { Line 330  sub problem_web_to_edit_header {
     $result.= ' />'.$show_all_foils_text.'</label></span>'.      $result.= ' />'.$show_all_foils_text.'</label></span>'.
  &Apache::loncommon::help_open_topic('Problem_Editor_Testing_Area','Testing Problems').   &Apache::loncommon::help_open_topic('Problem_Editor_Testing_Area','Testing Problems').
  '<hr />';   '<hr />';
     $result.=&mt('Apply style file').'      $result.=&mt('Apply style file: ').'
 <input type="text" name="style_file" value="'.&HTML::Entities::encode($env{'construct.style'},'"<>&').'" />  <input type="text" name="style_file" value="'.&HTML::Entities::encode($env{'construct.style'},'"<>&').'" />
  <a href="javascript:openbrowser(\'lonhomework\',\'style_file\',\'sty\')">'.&mt('Select').'</a>   <a href="javascript:openbrowser(\'lonhomework\',\'style_file\',\'sty\')">'.&mt('Select').'</a>
 <input type="submit" name="clear_style_file" value="'.&mt('Clear').'" />  <input type="submit" name="clear_style_file" value="'.&mt('Clear').'" />
Line 458  sub finalize_storage { Line 469  sub finalize_storage {
     }      }
     return $result;      return $result;
 }  }
 use Data::Dumper;  
   
 # -------------------------------------------------------------store_aggregates  # -------------------------------------------------------------store_aggregates
 # Sends hash of values to be incremented in nohist_resourcetracker.db  # Sends hash of values to be incremented in nohist_resourcetracker.db
Line 638  sub start_problem { Line 648  sub start_problem {
     }      }
   
     if ($target ne 'analyze') {      if ($target ne 'analyze') {
         if ($env{'request.state'} eq 'construct') { &set_problem_state('0'); }  
  $Apache::lonhomework::type=&Apache::lonnet::EXT('resource.0.type');   $Apache::lonhomework::type=&Apache::lonnet::EXT('resource.0.type');
  if (($env{'request.state'} eq 'construct') &&   if (($env{'request.state'} eq 'construct') &&
     defined($env{'form.problemtype'})) {      defined($env{'form.problemtype'})) {
Line 659  sub start_problem { Line 668  sub start_problem {
     $Apache::lonhomework::default_type = $Apache::lonhomework::type;      $Apache::lonhomework::default_type = $Apache::lonhomework::type;
   
     &initialize_storage();      &initialize_storage();
       if ($target ne 'analyze'
           && $env{'request.state'} eq 'construct') {
    &set_problem_state('0');
       }
   
     if ($target eq 'web') {      if ($target eq 'web') {
  &Apache::lonxml::debug(" grading history ");   &Apache::lonxml::debug(" grading history ");
  &Apache::lonhomework::showhash(%Apache::lonhomework::history);   &Apache::lonhomework::showhash(%Apache::lonhomework::history);
Line 751  sub start_problem { Line 765  sub start_problem {
     $msg.='<h1>'.&mt('Not open to be viewed').'</h1>';      $msg.='<h1>'.&mt('Not open to be viewed').'</h1>';
  }   }
  if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {   if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {
     $msg.='The problem '.$accessmsg;      $msg.=&mt('The problem ').$accessmsg;
  } elsif ($status eq 'UNCHECKEDOUT') {   } elsif ($status eq 'UNCHECKEDOUT') {
     $msg.=&checkout_msg();      $msg.=&checkout_msg();
  } elsif ($status eq 'NOT_YET_VIEWED') {   } elsif ($status eq 'NOT_YET_VIEWED') {
Line 1056  sub start_definetag { Line 1070  sub start_definetag {
   
     my $name = $token->[2]->{'name'};      my $name = $token->[2]->{'name'};
     my $skip=&Apache::lonxml::get_all_text("/definetag",$parser,$style);      my $skip=&Apache::lonxml::get_all_text("/definetag",$parser,$style);
     if ($name=~/^\//) {      if ($target eq 'web') {
  $result=   if ($name=~/^\//) {
  '<br /><table bgcolor="#FFBBBB"><tr><th>END <tt>'.$name.'</tt></th></tr>';      $result=
     } else {   '<br /><table class="LC_sty_end"><tr><th>'.
  $result=   &mt('END [_1]'.'<tt>'.$name.'</tt>').'</th></tr>';
  '<br /><table bgcolor="#BBFFBB"><tr><th>BEGIN <tt>'.$name.'</tt></th></tr>';   } else {
       $result=
    '<br /><table class="LC_sty_begin"><tr><th>'.
    &mt('BEGIN [_1]'.'<tt>'.$name.'</tt>').'</th></tr>';
    }
    $skip = &HTML::Entities::encode($skip, '<>&"');
    $result.='<tr><td><pre>'.$skip.'</pre></td></tr></table>';
     }      }
     $skip=~s/\</\&lt\;/gs;  
     $skip=~s/\>/\&gt\;/gs;  
     $result.='<tr><td><pre>'.$skip.'</pre></td></tr></table>';  
     return $result;      return $result;
 }  }
   
Line 1081  sub start_block { Line 1098  sub start_block {
     if ($target eq 'web' || $target eq 'grade'   || $target eq 'answer'  ||      if ($target eq 'web' || $target eq 'grade'   || $target eq 'answer'  ||
  $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {   $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {
  my $code = $token->[2]->{'condition'};   my $code = $token->[2]->{'condition'};
  if (defined($code)) {   if (defined($code) && $code ne '') {
     if (!$Apache::lonxml::default_homework_loaded) {      if (!$Apache::lonxml::default_homework_loaded) {
  &Apache::lonxml::default_homework_load($safeeval);   &Apache::lonxml::default_homework_load($safeeval);
     }      }
Line 1126  sub start_languageblock { Line 1143  sub start_languageblock {
  $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {   $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {
  my $include = $token->[2]->{'include'};   my $include = $token->[2]->{'include'};
  my $exclude = $token->[2]->{'exclude'};   my $exclude = $token->[2]->{'exclude'};
         my %languages=&Apache::loncommon::display_languages();          my $preferred_language=(&Apache::loncommon::preferred_languages)[0];
   # This should not even happen, since we should at least have the server language
           if (!$preferred_language) { $preferred_language='en'; }
   # If the languageblock has no arguments, show the contents
         $result='1';          $result='1';
   # Do we have an include argument?
  if ($include) {   if ($include) {
   # If include is specified, by default, don't render the block
             $result='';              $result='';
             foreach (split(/\,/,$include)) {              foreach my $included_language (split(/\,/,$include)) {
                 if ($languages{$_}) { $result='1'; }  # ... but if my preferred language is included, render it
                   if ($included_language eq $preferred_language) { $result='1'; }
             }              }
  }   }
   # Do we have an exclude argument?
         if ($exclude) {          if ($exclude) {
             foreach (split(/\,/,$exclude)) {              $result='1';
                 if ($languages{$_}) { $result='0'; }              foreach my $excluded_language (split(/\,/,$exclude)) {
                   if ($excluded_language eq $preferred_language) { $result='0'; }
             }              }
  }   }
  if ( ! $result ) {   if ( ! $result ) {
Line 1170  sub end_languageblock { Line 1195  sub end_languageblock {
     return $result;      return $result;
 }  }
   
   {
       my %available_texts;
       sub start_translated {
    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
    &Apache::lonxml::register('Apache::structuretags',('lang'));
    undef(%available_texts);
       }
       
       sub end_translated {
    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
    my $result;
    #show the translation on viewable targets
    if ($target eq 'web'     || $target eq 'tex' || $target eq 'webgrade'||
       # or non-viewable targets, if it's embedded in something that
       # wants the output
       (($target eq 'answer' || $target eq 'analyze'|| $target eq 'grade')
        && &Apache::lonxml::in_redirection() ) ) {
       my @possibilities = keys(%available_texts);
       my $which = 
    &Apache::loncommon::languages(\@possibilities) || 'default';
       $result = $available_texts{$which};
    }
    undef(%available_texts);
    &Apache::lonxml::deregister('Apache::structuretags',('lang'));
    return $result;
       }
   
   
       sub start_lang {
    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
    if ($target eq 'web' || $target eq 'grade'   || $target eq 'answer' ||
       $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {
       &Apache::lonxml::startredirection();
    }
    return '';
       }
   
       sub end_lang {
    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
    if ($target eq 'web' || $target eq 'grade'   || $target eq 'answer' ||
       $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {
       my $result = &Apache::lonxml::endredirection();
       my $which = &Apache::lonxml::get_param('which',$parstack,
      $safeeval);
       $available_texts{$which} = $result;
    }
    return '';
       }
   }
   
 sub start_instructorcomment {  sub start_instructorcomment {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   
Line 1375  sub start_part { Line 1450  sub start_part {
                                      # duedates.                                       # duedates.
     }      }
     my $result='';      my $result='';
     my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval);      my $id= &Apache::lonxml::get_id($parstack,$safeeval);
     if ($id =~ /^\s*$/) { $id = $Apache::lonxml::curdepth; }  
     $Apache::inputtags::part=$id;      $Apache::inputtags::part=$id;
     push(@Apache::inputtags::partlist,$id);      push(@Apache::inputtags::partlist,$id);
     @Apache::inputtags::response=();      @Apache::inputtags::response=();
Line 1429  sub start_part { Line 1503  sub start_part {
  if ($target eq 'tex') {   if ($target eq 'tex') {
     if (not $env{'form.problem_split'}=~/yes/) {      if (not $env{'form.problem_split'}=~/yes/) {
  if ($$tagstack[-2] eq 'td') {   if ($$tagstack[-2] eq 'td') {
     $result.='\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent';      $result.='\noindent \begin{minipage}{\textwidth}\noindent';
  } else {   } else {
     $result.='\noindent \end{minipage}\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent';      $result.='\noindent \end{minipage}\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent';
  }   }

Removed from v.1.384  
changed lines
  Added in v.1.397


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>