Diff for /loncom/homework/structuretags.pm between versions 1.426 and 1.447

version 1.426, 2008/08/04 22:42:11 version 1.447, 2009/05/28 12:39:17
Line 27 Line 27
 #  #
 ###  ###
   
   =pod
   
   =head1 NAME
   
   Apache::structuretags
   
   =head1 SYNOPSIS
   
   
   This is part of the LearningOnline Network with CAPA project
   described at http://www.lon-capa.org.
   
   
   =head1 NOTABLE SUBROUTINES
   
   =over
   
   =item 
   
   =back
   
   =cut
   
   
 package Apache::structuretags;   package Apache::structuretags; 
   
Line 36  use Apache::File(); Line 59  use Apache::File();
 use Apache::lonmenu;  use Apache::lonmenu;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonxml;  use Apache::lonxml;
   use Apache::londefdef;
 use Apache::lonenc();  use Apache::lonenc();
 use Time::HiRes qw( gettimeofday tv_interval );  use Time::HiRes qw( gettimeofday tv_interval );
 use lib '/home/httpd/lib/perl/';  use lib '/home/httpd/lib/perl/';
Line 74  sub start_tex { Line 98  sub start_tex {
     if ($target ne 'edit' && $target ne 'modified') {      if ($target ne 'edit' && $target ne 'modified') {
  my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser,$style);   my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser,$style);
  if ($target eq 'tex') {   if ($target eq 'tex') {
     return $bodytext.' ';      
       # If inside a table, occurrences of \\ must be removed;
       # else the table blows up.
   
       if (&Apache::londefdef::is_inside_of($tagstack, "table")) {
    $bodytext =~ s/\\\\//g;
       }
       return $bodytext.'{}';
  }   }
     } elsif ($target eq "edit" ) {      } elsif ($target eq "edit" ) {
  my $bodytext =    my $bodytext = 
Line 148  sub page_start { Line 179  sub page_start {
   
     $extra_head .= &homework_js();      $extra_head .= &homework_js();
   
     unless ($env{'environment.wysiwygeditor'} eq 'on') {      if ($env{'environment.wysiwygeditor'} eq 'on') {
         $extra_head .= &Apache::lonhtmlcommon::dragmath_js();   $extra_head .= &Apache::lonhtmlcommon::dragmath_js("FCKEditMathPopup");
       } else {
           $extra_head .= &Apache::lonhtmlcommon::dragmath_js("EditMathPopup");
     }      }
   
     my %body_args;      my %body_args;
Line 170  sub page_start { Line 203  sub page_start {
  }   }
     }      }
   
       my $pageheader = '';
     if (defined($found{'body'})) {      if (defined($found{'body'})) {
  $body_args{'skip_phases'}{'body'}=1;   $body_args{'skip_phases'}{'body'}=1;
     } elsif (!defined($found{'body'})       } elsif (!defined($found{'body'}) 
Line 178  sub page_start { Line 212  sub page_start {
     if ($env{'environment.remote'} ne 'off') {      if ($env{'environment.remote'} ne 'off') {
  $body_args{'only_body'}  = 1;   $body_args{'only_body'}  = 1;
     }      }
           $pageheader = &Apache::lonhtmlcommon::breadcrumbs() # FIXME add breadcrumbs
                        .&Apache::loncommon::head_subbox(
                   &Apache::loncommon::CSTR_pageheader());
  }   }
     } elsif (!defined($found{'body'})) {      } elsif (!defined($found{'body'})) {
  my %add_entries;   my %add_entries;
Line 189  sub page_start { Line 226  sub page_start {
   
  my $bgcolor=&Apache::lonxml::get_param('bgcolor',$parstack,   my $bgcolor=&Apache::lonxml::get_param('bgcolor',$parstack,
        $safeeval);         $safeeval);
         if ($bgcolor eq '' ) { $bgcolor = '#FFFFFF'; }          if ($bgcolor eq '' ) { $bgcolor = '#FFFFFF'; }
   
  $body_args{'bgcolor'}        = $bgcolor;          $body_args{'bgcolor'}        = $bgcolor;
  $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'          if ($env{'environment.remote'} eq 'off'
     && $env{'request.state'} eq   'construct') {              && $env{'request.state'} eq   'construct') {
     $body_args{'only_body'}  = 1;              $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,
     \%body_args);      \%body_args);
       $page_start .= $pageheader;
     if (!defined($found{'body'})       if (!defined($found{'body'}) 
  && $env{'request.state'} ne 'construct'   && $env{'request.state'} ne 'construct'
  && ($target eq 'web' || $target eq 'webgrade')) {   && ($target eq 'web' || $target eq 'webgrade')) {
Line 390  sub problem_web_to_edit_header { Line 427  sub problem_web_to_edit_header {
  &mt(' Show All Instances')   &mt(' Show All Instances')
  : &mt(' Show All Foils');   : &mt(' Show All Foils');
   
     my $show_all= '<span class="LC_nobreak"><label><input type="checkbox" name="showallfoils" ';      my $show_all= '<span class="LC_nobreak"><label><input type="checkbox" name="showallfoils"';
     if (defined($env{'form.showallfoils'})) { $show_all.='checked="checked"'; }      if (defined($env{'form.showallfoils'})) { $show_all.=' checked="checked"'; }
     $show_all.= ' />'.$show_all_foils_text.'</label></span>';      $show_all.= ' />'.$show_all_foils_text.'</label></span>';
   
   
Line 416  sub problem_web_to_edit_header { Line 453  sub problem_web_to_edit_header {
 <select name='problemtype'>  <select name='problemtype'>
   <option value=''></option>    <option value=''></option>
   ".&option('exam'   ,'problemtype').&mt("Exam Problem")."</option>    ".&option('exam'   ,'problemtype').&mt("Exam Problem")."</option>
   ".&option('problem','problemtype').&mt("Homework problem")."</option>    ".&option('problem','problemtype').&mt("Homework Problem")."</option>
   ".&option('survey' ,'problemtype').&mt("Survey Question")."</option>    ".&option('survey' ,'problemtype').&mt("Survey Question")."</option>
     ".&option('practice' ,'problemtype').&mt("Practice Problem")."</option>
 </select>  </select>
 </span>  </span>
 $show_all  $show_all
Line 488  $show_all Line 526  $show_all
   
     $result.='      $result.='
    </div>     </div>
    <div class="LC_edit_problem_header_edit_row">';     <hr class="LC_edit_problem_divide" />
      <div>';
     $result.='<input type="hidden" name="problemmode" value="view" />';      $result.='<input type="hidden" name="problemmode" value="view" />';
     $result .= '<input type="button" name="submitmode" accesskey="e" value="'.&mt('Edit').'" '.      $result .= '<input type="button" name="submitmode" accesskey="e" value="'.&mt('Edit').'" '.
                'onclick="javascript:setmode(this.form,'."'edit'".')" />';                 'onclick="javascript:setmode(this.form,'."'edit'".')" />';
Line 496  $show_all Line 535  $show_all
                'onclick="javascript:setmode(this.form,'."'editxml'".')" />';                 'onclick="javascript:setmode(this.form,'."'editxml'".')" />';
     $result.='      $result.='
    </div>     </div>
      <hr class="LC_edit_problem_divide" />
    '.&Apache::lonxml::message_location().'     '.&Apache::lonxml::message_location().'
 </div>';  </div>';
     return $result;      return $result;
Line 540  sub initialize_storage { Line 580  sub initialize_storage {
     if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); }      if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); }
 }  }
   
 # -------------------------------------------------------------finalize_storage  =pod
 # Stores away the result has to a student's environment  
 # checks form.grade_ for specific values, other wises stores  =item finalize_storage()
 # to the running users environment  
 # Will increment totals for attempts, students, and corrects   Stores away the result has to a student's environment
 # if running user has student role.     checks form.grade_ for specific values, other wises stores
    to the running users environment
    Will increment totals for attempts, students, and corrects
    if running user has student role.
   
   =cut
   
   
 sub finalize_storage {  sub finalize_storage {
     my ($given_symb) = @_;      my ($given_symb) = @_;
     my $result;      my $result;
Line 576  sub finalize_storage { Line 623  sub finalize_storage {
     return $result;      return $result;
 }  }
   
 # -------------------------------------------------------------store_aggregates  =pod
 # Sends hash of values to be incremented in nohist_resourcetracker.db  
 # for the course. Increments total number of attempts, unique students   item store_aggregates()
 # and corrects for each part for an instance of a problem, as appropriate.  
    Sends hash of values to be incremented in nohist_resourcetracker.db
    for the course. Increments total number of attempts, unique students 
    and corrects for each part for an instance of a problem, as appropriate.
   
   =cut
   
 sub store_aggregates {  sub store_aggregates {
     my ($symb,$courseid) = @_;      my ($symb,$courseid) = @_;
     my %aggregate;      my %aggregate;
Line 630  sub checkout_msg { Line 683  sub checkout_msg {
 <font color="red">  <font color="red">
 <p>$lt{'warning'}</p>  <p>$lt{'warning'}</p>
 </font>  </font>
 <form name="checkout" method="POST" action="$uri">  <form name="checkout" method="post" action="$uri">
 <input type="hidden" name="doescheckout" value="yes" />  <input type="hidden" name="doescheckout" value="yes" />
 <input type="button" name="checkoutbutton" value="$lt{'checkout'}" onClick="javascript:if (confirm('$lt{'checkout?'}')) { document.checkout.submit(); }" />  <input type="button" name="checkoutbutton" value="$lt{'checkout'}" onClick="javascript:if (confirm('$lt{'checkout?'}')) { document.checkout.submit(); }" />
 </form>  </form>
Line 664  sub firstaccess_msg { Line 717  sub firstaccess_msg {
     my $buttontext = &mt('Show Resource');      my $buttontext = &mt('Show Resource');
     my $timertext = &mt('Start Timer?');      my $timertext = &mt('Start Timer?');
     $result .= (<<ENDCHECKOUT);      $result .= (<<ENDCHECKOUT);
 <form name="markaccess" method="POST" action="$uri">  <form name="markaccess" method="post" action="$uri">
 <input type="hidden" name="markaccess" value="yes" />  <input type="hidden" name="markaccess" value="yes" />
 <input type="button" name="accessbutton" value="$buttontext" onClick="javascript:if (confirm('$timertext')) { document.markaccess.submit(); }" />  <input type="button" name="accessbutton" value="$buttontext" onClick="javascript:if (confirm('$timertext')) { document.markaccess.submit(); }" />
 </form>  </form>
Line 857  sub start_problem { Line 910  sub start_problem {
     }      }
     if ($env{'request.role.adv'}) {      if ($env{'request.role.adv'}) {
  $form_tag_start.=   $form_tag_start.=
     ' <label><input type="checkbox" name="showallfoils" ';      ' <label><input type="checkbox" name="showallfoils"';
  if (defined($env{'form.showallfoils'})) {   if (defined($env{'form.showallfoils'})) {
     $form_tag_start.='checked="on"';      $form_tag_start.=' checked="checked"';
  }   }
  $form_tag_start.= ' />'.&mt('&nbsp;Show&nbsp;All&nbsp;Foils').   $form_tag_start.= ' />'.&mt('&nbsp;Show&nbsp;All&nbsp;Foils').
     '</label>';      '</label>';
     }      }
             if ($Apache::lonhomework::type eq 'practice') {              if ($Apache::lonhomework::type eq 'practice') {
                $form_tag_start.='<span class="LC_info"><h3>'.&mt('Practice Problem').'</h3></span>'.                  $form_tag_start.=&practice_problem_header();
                                 '<span class="LC_info">'.&mt('Submissions are not permanently recorded').'</span>';  
             }              }
     $form_tag_start.='<hr />';      $form_tag_start.='<hr />';
  }   }
Line 893  sub start_problem { Line 945  sub start_problem {
  my $msg;   my $msg;
  if ($status eq 'UNAVAILABLE') {   if ($status eq 'UNAVAILABLE') {
     $msg.='<h1>'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</h1>';      $msg.='<h1>'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</h1>';
                   } elsif ($status eq 'NOT_IN_A_SLOT') {
                       $msg.='<h1>'.&mt('You are not currently signed up to work at this time and/or place.').'</h1>';
  } elsif ($status ne 'NOT_YET_VIEWED') {   } elsif ($status ne 'NOT_YET_VIEWED') {
     $msg.='<h1>'.&mt('Not open to be viewed').'</h1>';      $msg.='<h1>'.&mt('Not open to be viewed').'</h1>';
  }   }
Line 903  sub start_problem { Line 957  sub start_problem {
  } elsif ($status eq 'NOT_YET_VIEWED') {   } elsif ($status eq 'NOT_YET_VIEWED') {
     $msg.=&firstaccess_msg($accessmsg,$symb);      $msg.=&firstaccess_msg($accessmsg,$symb);
  } elsif ($status eq 'NOT_IN_A_SLOT') {   } elsif ($status eq 'NOT_IN_A_SLOT') {
     $msg.=&Apache::bridgetask::add_request_another_attempt_button("Sign up for time to work.");      $msg.=&Apache::bridgetask::add_request_another_attempt_button("Sign up for time to work");
  }   }
  $result.=$msg.'<br />';   $result.=$msg.'<br />';
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  my $startminipage = ($env{'form.problem_split'}=~/yes/i)? ''   my $startminipage = ($env{'form.problem_split'}=~/yes/i)? ''
                     : '\begin{minipage}{\textwidth}';                      : '\begin{minipage}{\textwidth}';
  $result.='\begin{document}\noindent \vskip 1 mm '.   $result.='\noindent \vskip 1 mm '.
     $startminipage.'\vskip 0 mm';      $startminipage.'\vskip 0 mm';
  if ($status eq 'UNAVAILABLE') {   if ($status eq 'UNAVAILABLE') {
     $result.=&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'\vskip 0 mm ';      $result.=&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'\vskip 0 mm ';
Line 940  sub start_problem { Line 994  sub start_problem {
     # create a page header and exit      # create a page header and exit
     if ($env{'request.state'} eq "construct") {      if ($env{'request.state'} eq "construct") {
  $result.= &problem_web_to_edit_header($env{'form.rndseed'});   $result.= &problem_web_to_edit_header($env{'form.rndseed'});
                   if ($Apache::lonhomework::type eq 'practice') {
                       $result.= '<input type="submit" name="resetdata" '.
                                 'value="'.&mt('New Problem Variation').'" />'.
                                 &practice_problem_header().'<hr />';
                   }
     }      }
     # if we are viewing someone else preserve that info      # if we are viewing someone else preserve that info
     if (defined $env{'form.grade_symb'}) {      if (defined $env{'form.grade_symb'}) {
Line 1005  sub end_problem { Line 1064  sub end_problem {
     $allow_print_points=0;      $allow_print_points=0;
  }   }
  my $name_of_resourse= &Apache::lonxml::latex_special_symbols(&get_resource_name($parstack,$safeeval),'header');   my $name_of_resourse= &Apache::lonxml::latex_special_symbols(&get_resource_name($parstack,$safeeval),'header');
  my $begin_doc='\begin{document} \typeout{STAMPOFPASSEDRESOURCESTART Resource <h2>"'.$name_of_resourse.'"</h2> located in <br /><small><b>'.$env{'request.uri'}.'</b></small><br /> STAMPOFPASSEDRESOURCEEND} \noindent ';   my $begin_doc=' \typeout{STAMPOFPASSEDRESOURCESTART Resource <h2>"'.$name_of_resourse.'"</h2> located in <br /><small><b>'.$env{'request.uri'}.'</b></small><br /> STAMPOFPASSEDRESOURCEEND} \noindent ';
  my $toc_line='\vskip 1 mm\noindent '.$startminipage.   my $toc_line='\vskip 1 mm\noindent '.$startminipage.
     '\addcontentsline{toc}{subsection}{'.$name_of_resourse.'}';      '\addcontentsline{toc}{subsection}{'.$name_of_resourse.'}';
   
Line 1175  sub start_library { Line 1234  sub start_library {
  $result.=" \n $form_tag_start".   $result.=" \n $form_tag_start".
   '<input type="hidden" name="submitted" value="yes" />';    '<input type="hidden" name="submitted" value="yes" />';
  $result.=&problem_web_to_edit_header($rndseed);   $result.=&problem_web_to_edit_header($rndseed);
           if ($Apache::lonhomework::type eq 'practice') {
               $result.= '<input type="submit" name="resetdata" '.
                         'value="'.&mt('New Problem Variation').'" />'.
                         &practice_problem_header().'<hr />';
           }
     }      }
     return $result;      return $result;
 }  }
Line 1275  sub start_languageblock { Line 1339  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 @preferred_languages=&Apache::loncommon::preferred_languages();          my @preferred_languages=&Apache::lonlocal::preferred_languages();
 # This should not even happen, since we should at least have the server language  # This should not even happen, since we should at least have the server language
         if (!$preferred_languages[0]) { $preferred_languages[0]='en'; }          if (!$preferred_languages[0]) { $preferred_languages[0]='en'; }
 # Now loop over all languages in order of preference  # Now loop over all languages in order of preference
Line 1382  sub end_languageblock { Line 1446  sub end_languageblock {
     my $result = &Apache::lonxml::endredirection();      my $result = &Apache::lonxml::endredirection();
     my $which = &Apache::lonxml::get_param('which',$parstack,      my $which = &Apache::lonxml::get_param('which',$parstack,
    $safeeval);     $safeeval);
     $available_texts{$which} = $result;              if ($which=~/\w/) {
                   $available_texts{$which} = $result;
               }
               my $otherlangs = &Apache::lonxml::get_param('other',$parstack,
                                                           $safeeval);
               foreach my $language (split(/\s*\,\s*/,$otherlangs)) {
                   if ($language=~/\w/) {
                       $available_texts{$language} = $result;
                   }
               }
   
  }   }
  return '';   return '';
     }      }
Line 1479  sub end_while { Line 1553  sub end_while {
     $return = &Apache::run::run($code,$safeeval);      $return = &Apache::run::run($code,$safeeval);
  }   }
  if ($error) {   if ($error) {
     &Apache::lonxml::error('<pre>'.&mt('Code ran too long. It ran for more than').' '.$Apache::lonnet::perlvar{'lonScriptTimeout'}.' '.&mt('seconds occured while running &lt;while&gt; on line').' '.$line.'</pre>');      &Apache::lonxml::error('<pre>'.&mt('Code ran too long. It ran for more than').' '.$Apache::lonnet::perlvar{'lonScriptTimeout'}.' '.&mt('seconds occurred while running &lt;while&gt; on line').' '.$line.'</pre>');
  }   }
     } elsif ($target eq "edit") {      } elsif ($target eq "edit") {
  $result.= &Apache::edit::tag_end($target,$token,'');   $result.= &Apache::edit::tag_end($target,$token,'');
Line 1533  sub start_randomlist { Line 1607  sub start_randomlist {
     my $showarg=&Apache::lonxml::get_param('show',$parstack,$safeeval);      my $showarg=&Apache::lonxml::get_param('show',$parstack,$safeeval);
     $showarg--;      $showarg--;
     if ( ($showarg >= 0) && ($showarg < $show) ) { $show = $showarg; }      if ( ($showarg >= 0) && ($showarg < $show) ) { $show = $showarg; }
               if (($target eq 'analyze') && ($env{'form.check_parts_withrandomlist'})) {
                   my @currlist;
                   my $part = $Apache::inputtags::part;
                   if ($part ne '') {
                       if (ref($Apache::lonhomework::analyze{'parts_withrandomlist'}) eq 'ARRAY') {
                           my @currlist = @{$Apache::lonhomework::analyze{'parts_withrandomlist'}};
                           if (!(grep(/^\Q$part\E$/,@currlist))) {
                               push(@{$Apache::lonhomework::analyze{'parts_withrandomlist'}},$part);
                           }
                       } else {
                           push(@{$Apache::lonhomework::analyze{'parts_withrandomlist'}},$part);
                       }
                   }
               }
     for(0 .. $show) {      for(0 .. $show) {
  $bodytext .= "$randomlist[ $idx_arr[$_] ]";   $bodytext .= "$randomlist[ $idx_arr[$_] ]";
     }      }
Line 1839  sub start_problemtype { Line 1927  sub start_problemtype {
  $result .=&Apache::edit::checked_arg('When used as type(s):','for',   $result .=&Apache::edit::checked_arg('When used as type(s):','for',
      [ ['exam','Exam/Quiz Problem'],       [ ['exam','Exam/Quiz Problem'],
        ['survey','Survey'],         ['survey','Survey'],
        ['problem','Homework Problem'] ]         ['problem','Homework Problem'],
                                                  ['practice','Practice Problem'] ]
      ,$token);       ,$token);
  $result .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();   $result .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
     } elsif ($target eq 'modified') {      } elsif ($target eq 'modified') {
Line 1872  sub end_startouttext { Line 1961  sub end_startouttext {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result='';      my $result='';
     my $text='';      my $text='';
   
     if ($target eq 'edit') {      if ($target eq 'edit') {
  my $areaid = 'homework_edit_'.$Apache::lonxml::curdepth;   my $areaid = 'homework_edit_'.$Apache::lonxml::curdepth;
  $text=&Apache::lonxml::get_all_text("endouttext",$parser,$style);   $text=&Apache::lonxml::get_all_text("endouttext",$parser,$style);
  $result.=&Apache::edit::start_table($token)."<tr><td>".&mt('Text Block')."</td>   $result.=&Apache::edit::start_table($token)."<tr><td>".&mt('Text Block')."</td>"
 <td>".&mt('Delete:').                   .'<td><span class="LC_nobreak">'.&mt('Delete?').' '
                  &Apache::edit::deletelist($target,$token)                   .&Apache::edit::deletelist($target,$token)
  ."</td>";                   .'</span></td>';
         unless ($env{'environment.wysiwygeditor'} eq 'on') {          unless ($env{'environment.wysiwygeditor'} eq 'on') {
             $result.='<td align="left">'      $result .= '<td align="left">'
                      .&Apache::lonhtmlcommon::dragmath_button($areaid,1)   .&Apache::lonhtmlcommon::dragmath_button($areaid,1)
                      .'</td>';   .'</td>'
         }   .'<td>'
    .&Apache::edit::insertlist($target,$token)
    .'</td>';
    }
  $result.='<td align="right" valign="top">' .   $result.='<td align="right" valign="top">' .
  &Apache::loncommon::helpLatexCheatsheet().      &Apache::loncommon::helpLatexCheatsheet().
  &Apache::edit::end_row().   &Apache::edit::end_row().
                  &Apache::edit::start_spanning_row()."\n".                   &Apache::edit::start_spanning_row()."\n".
  &Apache::edit::editfield($token->[1],$text,"",80,8,1);   &Apache::edit::editfield($token->[1],$text,"",80,8,1);
Line 1949  sub start_simpleeditbutton { Line 2040  sub start_simpleeditbutton {
         my $url=$env{'request.noversionuri'};          my $url=$env{'request.noversionuri'};
         $url=~s/\?.*$//;          $url=~s/\?.*$//;
  my ($symb) = &Apache::lonnet::whichuser();   my ($symb) = &Apache::lonnet::whichuser();
  $result='<table width="100%" bgcolor="#FFFFAA" border="2"><tr><td>'.  #       Warning make more sense and is more important on edit screen
                 '<a href="'.$url.'/smpedit?symb='.&escape($symb).'">'.&mt('Edit').'</a> - '.&mt('Note: it can take up to 10 minutes for changes to take effect for all users.').  #       $result='<p class="LC_warning">'
 &Apache::loncommon::help_open_topic('Caching').'</td></tr></table><br />';  #              .&mt('Note: it can take up to 10 minutes for changes to take effect for all users.')
   #              .&Apache::loncommon::help_open_topic('Caching')
   #              .'</p>';
           $result.=&Apache::lontemplate::start_functionslist()
                   .&Apache::lontemplate::item_functionslist(
                        '<a href="'.$url.'/smpedit?symb='.&escape($symb).'">'.&mt('Edit').'</a>')
                   .&Apache::lontemplate::end_functionslist();
   
     }      }
     return $result;      return $result;
 }  }
Line 1960  sub end_simpleeditbutton { Line 2058  sub end_simpleeditbutton {
     return '';      return '';
 }  }
   
   sub practice_problem_header {
       return '<span class="LC_info"><h3>'.&mt('Practice Problem').'</h3></span>'.
              '<span class="LC_info">'.&mt('Submissions are not permanently recorded').
              '</span>';
   }
   
 1;  1;
 __END__  __END__
   
   =pod
   
   =back
   
   =cut

Removed from v.1.426  
changed lines
  Added in v.1.447


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