Diff for /loncom/homework/structuretags.pm between versions 1.219 and 1.235

version 1.219, 2003/10/30 20:52:54 version 1.235, 2004/02/13 23:59:24
Line 37  use Apache::lonnet; Line 37  use Apache::lonnet;
 use Apache::File();  use Apache::File();
 use Apache::lonmenu;  use Apache::lonmenu;
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonxml;
   
 BEGIN {  BEGIN {
     &Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','startouttext','endouttext',      &Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','startouttext','endouttext',
Line 171  sub setup_rndseed { Line 172  sub setup_rndseed {
  if (defined($rndseed) && $rndseed ne int($rndseed)) {   if (defined($rndseed) && $rndseed ne int($rndseed)) {
    $rndseed=join(',',&Math::Random::random_seed_from_phrase($rndseed));     $rndseed=join(',',&Math::Random::random_seed_from_phrase($rndseed));
         }          }
  &Apache::lonxml::debug("Setting rndseed to $rndseed");   if ($safeeval) {
  &Apache::run::run('$external::randomseed='.$rndseed.';',$safeeval);      &Apache::lonxml::debug("Setting rndseed to $rndseed");
       &Apache::run::run('$external::randomseed='.$rndseed.';',$safeeval);
    }
     }      }
     return $rndseed;      return $rndseed;
 }  }
Line 184  sub problem_edit_header { Line 187  sub problem_edit_header {
        <input type="submit" name="problemmode" value="'.&mt('EditXML').'" />         <input type="submit" name="problemmode" value="'.&mt('EditXML').'" />
        <input type="submit" name="Undo" value="'.&mt('undo').'" /> <hr />         <input type="submit" name="Undo" value="'.&mt('undo').'" /> <hr />
        <input type="submit" name="submit" value="'.&mt('Submit Changes and Edit').'" />         <input type="submit" name="submit" value="'.&mt('Submit Changes and Edit').'" />
        <input type="submit" name="submit" value="'.&mt('Submit Changes and View').'" /><br /><p>&nbsp;</p><table border="0"><tr><td bgcolor="#DDDDDD">         <input type="submit" name="submit" value="'.&mt('Submit Changes and View').'" /><table><tr><td>'.
       ';         &Apache::loncommon::help_open_topic('Problem_Editor_XML_Index',
      'Problem Editing Help').'</td><td>'.
          &Apache::loncommon::help_open_faq(5).
          &Apache::loncommon::help_open_bug('Authoring').'</td></tr></table>'.
          '<table border="0"><tr><td bgcolor="#DDDDDD">';
 }  }
   
 sub problem_edit_footer {  sub problem_edit_footer {
Line 193  sub problem_edit_footer { Line 200  sub problem_edit_footer {
     <input type="submit" name="submit" value="'.&mt('Submit Changes and View').'" />';      <input type="submit" name="submit" value="'.&mt('Submit Changes and View').'" />';
 }  }
   
   sub option {
       my ($value,$name) = @_;
       my $result ="<option value='".$value."' ";
       if ($ENV{'form.'.$name} eq $value) {
    $result.=" selected='on' ";
       }
       $result.='>';
       return $result;
   }
   
 sub problem_web_to_edit_header {  sub problem_web_to_edit_header {
     my ($rndseed)=@_;      my ($rndseed)=@_;
     my $result.='<input type="hidden" name="problemmode" value="'.&mt('View').'" />      my $result.='<input type="hidden" name="problemmode" value="'.&mt('View').'" />
Line 206  sub problem_web_to_edit_header { Line 223  sub problem_web_to_edit_header {
            onChange="javascript:document.lonhomework.changerandseed.click()" /></nobr>             onChange="javascript:document.lonhomework.changerandseed.click()" /></nobr>
              <input type="checkbox" name="showallfoils" ';               <input type="checkbox" name="showallfoils" ';
     if (defined($ENV{'form.showallfoils'})) { $result.='checked="on"'; }      if (defined($ENV{'form.showallfoils'})) { $result.='checked="on"'; }
     $result.= ' />'.&mt('&nbsp;Show&nbsp;All&nbsp;Foils').'      $result.= ' />'.&mt('&nbsp;Show&nbsp;All&nbsp;Foils').
              <hr />';   &Apache::loncommon::help_open_topic('Problem_Editor_Testing_Area','Testing Problems').
    '<hr />';
       $result.="
   <nobr>
   Problem Status:
   <select name='problemstate'>
     <option name=''></option>
     ".&option('CLOSED'               ,'problemstate').&mt("Closed")."</option>
     ".&option('CAN_ANSWER'           ,'problemstate').&mt("Answerable")."</option>
     ".&option('CANNOT_ANSWER_tries'  ,'problemstate').&mt("Open with full tries")."</option>
     ".&option('CANNOT_ANSWER_correct','problemstate').&mt("Open and correct")."</option>
     ".&option('SHOW_ANSWER'          ,'problemstate').&mt("Show Answer")."</option>
   </select>
   </nobr>
   <nobr>
   Problem Type:
   <select name='problemtype'>
     <option name=''></option>
     ".&option('exam'   ,'problemtype')."Exam Problem</option>
     ".&option('problem','problemtype')."Homework problem</option>
     ".&option('survey' ,'problemtype')."Survey Question</option>
   </select>
   </nobr>
   <nobr>
   Feedback Mode:
   <select name='problemstatus'>
     <option value=''></option>
     ".&option('yes','problemstatus')."Show Feedback</option>
     ".&option('no', 'problemstatus')."Don\'t Show Feedback</option>
   </select>
   <input type='submit' name='changeproblemmode' value='Change' />
   </nobr>
   <hr />";
     my $numtoanalyze=$ENV{'form.numtoanalyze'};      my $numtoanalyze=$ENV{'form.numtoanalyze'};
     if (!$numtoanalyze) { $numtoanalyze=20; }      if (!$numtoanalyze) { $numtoanalyze=20; }
     $result.= '<input type="submit" name="problemmode" value='.      $result.= '<input type="submit" name="problemmode" value='.
Line 289  sub init_problem_globals { Line 338  sub init_problem_globals {
  @Apache::inputtags::partlist=('0');   @Apache::inputtags::partlist=('0');
  $Apache::lonhomework::problemstatus=   $Apache::lonhomework::problemstatus=
     &Apache::lonnet::EXT('resource.0.problemstatus');      &Apache::lonnet::EXT('resource.0.problemstatus');
    &Apache::lonxml::debug("problem status is  $Apache::lonhomework::problemstatus");
    &Apache::lonxml::debug("env probstat is ".$ENV{'form.problemstatus'});
    if ($ENV{'request.state'} eq 'construct' &&
       defined($ENV{'form.problemstatus'})) {
       $Apache::lonhomework::problemstatus=$ENV{'form.problemstatus'};
    }
     } else {      } else {
  $Apache::inputtags::part='';   $Apache::inputtags::part='';
  @Apache::inputtags::partlist=();   @Apache::inputtags::partlist=();
Line 427  sub start_problem { Line 482  sub start_problem {
     }      }
  } elsif ($target eq 'web') {   } elsif ($target eq 'web') {
     my $name= &get_resource_name($parstack,$safeeval);      my $name= &get_resource_name($parstack,$safeeval);
     if ($status eq 'CAN_ANSWER') {      $result.="$head_tag_start<title>$name</title></head>
  # create a page header and exit  
  $result.="$head_tag_start<title>$name</title></head>  
               $body_tag_start \n $form_tag_start".                $body_tag_start \n $form_tag_start".
   '<input type="hidden" name="submitted" value="yes" />';        '<input type="hidden" name="submitted" value="yes" />';
  if ($ENV{'request.state'} eq "construct") {      # create a page header and exit
     $result.= &problem_web_to_edit_header($ENV{'form.rndseed'});      if ($ENV{'request.state'} eq "construct") {
  }   $result.= &problem_web_to_edit_header($ENV{'form.rndseed'});
  # if we are viewing someone else preserve that info      }
  if (defined $ENV{'form.grade_symb'}) {      # if we are viewing someone else preserve that info
     foreach my $field ('symb','courseid','domain','username') {      if (defined $ENV{'form.grade_symb'}) {
  $result .= '<input type="hidden" name="grade_'.$field.   foreach my $field ('symb','courseid','domain','username') {
     '" value="'.$ENV{"form.grade_$field"}.'" />'."\n";      $result .= '<input type="hidden" name="grade_'.$field.
     }   '" value="'.$ENV{"form.grade_$field"}.'" />'."\n";
  }   }
     } elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER'  
      || $status eq 'CLOSED' || $status eq 'UNAVALAILABLE' ||  
      $status eq 'INVALID_ACCESS') {  
  $result.=$head_tag_start.  
     "<title>$name</title></head>\n$body_tag_start\n";  
     }      }
  } elsif ($target eq 'tex') {   } elsif ($target eq 'tex') {
     my $startminipage = '';      my $startminipage = '';
Line 455  sub start_problem { Line 503  sub start_problem {
     }      }
     my $id = $Apache::inputtags::part;      my $id = $Apache::inputtags::part;
     my $weight = &Apache::lonnet::EXT("resource.$id.weight");      my $weight = &Apache::lonnet::EXT("resource.$id.weight");
     my $allkeys=&Apache::lonnet::metadata($ENV{'request.uri'},'keys');      my $packages=&Apache::lonnet::metadata($ENV{'request.uri'},'packages');
     my @allkeys = split /,/,$allkeys;      my @packages = split /,/,$packages;
     my $allow_print_points = 0;      my $allow_print_points = 0;
     foreach my $partial_key (@allkeys) {      foreach my $partial_key (@packages) {
  if ($partial_key=~m/weight/) {   if ($partial_key=~m/^part_0$/) {
     $allow_print_points++;      $allow_print_points=1;
  }   }
     }      }
     my $duedate = &Apache::lonnet::EXT("resource.$id.duedate");       my $duedate = &Apache::lonnet::EXT("resource.$id.duedate"); 
Line 475  sub start_problem { Line 523  sub start_problem {
     my @due_file_content = <$temp_file>;      my @due_file_content = <$temp_file>;
     my $due_file_content = $due_file_content[$#due_file_content];      my $due_file_content = $due_file_content[$#due_file_content];
     chomp $due_file_content;      chomp $due_file_content;
     my $name_of_resourse= &get_resource_name($parstack,$safeeval);      my $name_of_resourse= &Apache::lonxml::latex_special_symbols(&get_resource_name($parstack,$safeeval));
     if ($due_file_content ne $duedate) {      if ($due_file_content ne $duedate) {
  $temp_file = Apache::File->new('>'.$filename);   $temp_file = Apache::File->new('>'.$filename);
  print $temp_file "$duedate\n";   print $temp_file "$duedate\n";
Line 501  sub start_problem { Line 549  sub start_problem {
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result.=$head_tag_start."</head>".$body_tag_start.$form_tag_start.   $result.=$head_tag_start."</head>".$body_tag_start.$form_tag_start.
     &problem_edit_header();      &problem_edit_header();
    $Apache::lonxml::warnings_error_header=
       &mt("Editor Errors - these errors might not effect the running of the problem, but they will likely cause problems with further use of the Edit mode. Please use the EditXML mode to fix these errors.")."<br />";
  my $temp=&Apache::edit::insertlist($target,$token);   my $temp=&Apache::edit::insertlist($target,$token);
  $result.=$temp;   $result.=$temp;
     } elsif ($target eq 'modified') {      } elsif ($target eq 'modified') {
Line 520  sub end_problem { Line 570  sub end_problem {
     if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ||      if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ||
  $target eq 'tex') {   $target eq 'tex') {
  if ( $target eq 'grade' && $Apache::inputtags::part eq '0' &&   if ( $target eq 'grade' && $Apache::inputtags::part eq '0' &&
      $status eq 'CAN_ANSWER' ) {       ($status eq 'CAN_ANSWER' || $Apache::lonhomework::scantronmode)) {
     # if part is zero, no <part>s existed, so we need to the grading      # if part is zero, no <part>s existed, so we need to the grading
     &Apache::inputtags::grade;      &Apache::inputtags::grade;
  } elsif ( ($target eq 'web' || $target eq 'tex') &&   } elsif ( ($target eq 'web' || $target eq 'tex') &&
Line 535  sub end_problem { Line 585  sub end_problem {
     (($target eq 'web') && ($ENV{'request.state'} ne 'construct')) ||      (($target eq 'web') && ($ENV{'request.state'} ne 'construct')) ||
     ($target eq 'answer') || ($target eq 'tex')      ($target eq 'answer') || ($target eq 'tex')
    ) {     ) {
     if ($status eq 'CAN_ANSWER') {      if ($target ne 'tex' &&
  if ($target ne 'tex' &&   $ENV{'form.answer_output_mode'} ne 'tex') {
     $ENV{'form.answer_output_mode'} ne 'tex') {   $result.="</form></body>\n";
     $result.="</form></body>\n";  
  }  
     } elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER' ||  
     $status eq 'UNCHECKEDOUT' || $status eq 'INVALID_ACCESS') {  
  if ($target ne 'tex' &&  
     $ENV{'form.answer_output_mode'} ne 'tex') {  
     $result.="</body>\n";  
  }  
     }      }
     if ($target eq 'web') {      if ($target eq 'web') {
  $result.=&Apache::lonxml::xmlend();   $result.=&Apache::lonxml::xmlend();
Line 946  sub start_part { Line 988  sub start_part {
     &Apache::run::run($expression,$safeeval);      &Apache::run::run($expression,$safeeval);
   
     if ($target eq 'meta') {      if ($target eq 'meta') {
  return &Apache::response::mandatory_part_meta;   my $display=&Apache::lonxml::get_param('display',$parstack,$safeeval);
    return &Apache::response::mandatory_part_meta.
          &Apache::response::meta_parameter_write('display','string',$display,'Part Description');
     } elsif ($target eq 'web' || $target eq 'grade' ||      } elsif ($target eq 'web' || $target eq 'grade' ||
      $target eq 'answer' || $target eq 'tex') {       $target eq 'answer' || $target eq 'tex') {
  if ($hidden) {   if ($hidden) {
Line 978  sub start_part { Line 1022  sub start_part {
  $result.='\noindent \end{minipage}\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent';   $result.='\noindent \end{minipage}\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent';
     }      }
     my $weight = &Apache::lonnet::EXT("resource.$id.weight");      my $weight = &Apache::lonnet::EXT("resource.$id.weight");
     if ($Apache::lonhomework::type eq 'exam') { $result .= '\fbox{\textit{'.$weight.' pt}}';}      my $allkeys=&Apache::lonnet::metadata($ENV{'request.uri'},'packages');
       my @allkeys = split /,/,$allkeys;
       my $allow_print_points = 0;
       foreach my $partial_key (@allkeys) {
    if ($partial_key=~m/^part_(.*)$/) {
       if ($1 ne '0') {$allow_print_points=1;}
    }
       }
       if (($Apache::lonhomework::type eq 'exam') && ($allow_print_points)) { $result .= '\fbox{\textit{'.$weight.' pt}}';}
    } elsif ($target eq 'web') {
       $result.='<a name="'.&Apache::lonnet::escape($Apache::inputtags::part).'" />';
  }   }
     }      }
  }   }
Line 986  sub start_part { Line 1040  sub start_part {
  $result.=&Apache::edit::tag_start($target,$token);   $result.=&Apache::edit::tag_start($target,$token);
  $result.=&Apache::edit::text_arg('Part ID:','id',$token).   $result.=&Apache::edit::text_arg('Part ID:','id',$token).
     &Apache::loncommon::help_open_topic("Part_Tag_Edit_Help").      &Apache::loncommon::help_open_topic("Part_Tag_Edit_Help").
       '&nbsp;&nbsp;'.
   &Apache::edit::text_arg('Displayed Part Description:','display',$token).
  &Apache::edit::end_row().&Apache::edit::start_spanning_row();   &Apache::edit::end_row().&Apache::edit::start_spanning_row();
     } elsif ($target eq 'modified') {      } elsif ($target eq 'modified') {
  my $constructtag=&Apache::edit::get_new_args($token,$parstack,   my $constructtag=&Apache::edit::get_new_args($token,$parstack,
      $safeeval,'id');       $safeeval,'id','display');
  if ($constructtag) {   if ($constructtag) {
       #limiting ids to only letters numbers, and space
       $token->[2]->{'id'}=~s/[^A-Za-z0-9 ]//gs;
     $result = &Apache::edit::rebuild_tag($token);      $result = &Apache::edit::rebuild_tag($token);
     $result.=&Apache::edit::handle_insert();      $result.=&Apache::edit::handle_insert();
  }   }
Line 1006  sub end_part { Line 1064  sub end_part {
     my $result='';      my $result='';
     if ( $target eq 'meta' ) {      if ( $target eq 'meta' ) {
  $result='';   $result='';
     } elsif ( $target eq 'grade' && $status eq 'CAN_ANSWER' && !$hidden) {      } elsif ($target eq 'grade' && 
        ($status eq 'CAN_ANSWER' || $Apache::lonhomework::scantronmode) &&
        !$hidden) {
  $result=&Apache::inputtags::grade;   $result=&Apache::inputtags::grade;
     } elsif (($target eq 'web' || $target eq 'tex') && !$hidden ) {      } elsif (($target eq 'web' || $target eq 'tex') && !$hidden ) {
  my $gradestatus=&Apache::inputtags::gradestatus($Apache::inputtags::part,   my $gradestatus=&Apache::inputtags::gradestatus($Apache::inputtags::part,
Line 1041  sub end_preduedate { Line 1101  sub end_preduedate {
   
 sub start_postanswerdate {  sub start_postanswerdate {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     if ($target eq 'web' || $target eq 'grade' || $target eq 'tex') {      if ($target eq 'web' || $target eq 'grade') {
  if ($Apache::inputtags::status['-1'] ne 'SHOW_ANSWER') {   if ($Apache::inputtags::status['-1'] ne 'SHOW_ANSWER') {
     &Apache::lonxml::get_all_text("/postanswerdate",$parser);      &Apache::lonxml::get_all_text("/postanswerdate",$parser);
  }   }
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  return '\vskip 0 mm \noindent';   &Apache::lonxml::get_all_text("/postanswerdate",$parser);
     }      }
     return '';      return '';
 }  }
Line 1159  sub start_simpleeditbutton { Line 1219  sub start_simpleeditbutton {
     my $result='';      my $result='';
     if (($target eq 'web') &&      if (($target eq 'web') &&
         (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {          (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {
         my $url=$ENV{'REQUEST_URI'};          my $url=$ENV{'request.noversionuri'};
         $url=~s/\?.*$//;          $url=~s/\?.*$//;
  $result='<table width="100%" bgcolor="#FFFFAA" border="2"><tr><td>'.   $result='<table width="100%" bgcolor="#FFFFAA" border="2"><tr><td>'.
                 '<a href="'.$url.'/smpedit">'.&mt('Simple Problem Editor').'</a> - '.&mt('Note: it can take up to 10 minutes for changes to take effect for all users.').                  '<a href="'.$url.'/smpedit">'.&mt('Simple Problem Editor').'</a> - '.&mt('Note: it can take up to 10 minutes for changes to take effect for all users.').

Removed from v.1.219  
changed lines
  Added in v.1.235


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