Diff for /loncom/interface/lonparmset.pm between versions 1.522.2.26.2.3 and 1.522.2.27

version 1.522.2.26.2.3, 2021/01/19 00:44:10 version 1.522.2.27, 2020/02/12 19:54:47
Line 767  sub valout { Line 767  sub valout {
         }          }
     } else {      } else {
         if ($type eq 'date_interval') {          if ($type eq 'date_interval') {
             my ($totalsecs,$donesuffix) = split(/_/,$value,2);              my ($sec,$min,$hour,$mday,$mon,$year)=gmtime($value);
             my ($usesdone,$donebuttontext,$proctor,$secretkey);  
             if ($donesuffix =~ /^done\:([^\:]+)\:(.*)$/) {  
                 $donebuttontext = $1;  
                 (undef,$proctor,$secretkey) = split(/_/,$2);  
                 $usesdone = 'done';  
             } elsif ($donesuffix =~ /^done(|_.+)$/) {  
                 $donebuttontext = &mt('Done');  
                 ($usesdone,$proctor,$secretkey) = split(/_/,$donesuffix);  
             }  
             my ($sec,$min,$hour,$mday,$mon,$year)=gmtime($totalsecs);  
             my @timer;              my @timer;
             $year=$year-70;              $year=$year-70;
             $mday--;              $mday--;
Line 810  sub valout { Line 800  sub valout {
                 push(@timer,&mt('[quant,_1,sec]',0));                  push(@timer,&mt('[quant,_1,sec]',0));
             }              }
             $result.=join(", ",@timer);              $result.=join(", ",@timer);
             if ($usesdone eq 'done') {  
                 if ($secretkey) {  
                     $result .= ' '.&mt('+ "[_1]" with proctor key: [_2]',$donebuttontext,$secretkey);  
                 } else {  
                     $result .= ' + "'.$donebuttontext.'"';  
                 }  
             }  
         } elsif (&isdateparm($type)) {          } elsif (&isdateparm($type)) {
             $result = &Apache::lonlocal::locallocaltime($value).              $result = &Apache::lonlocal::locallocaltime($value).
         &date_sanity_info($value);          &date_sanity_info($value);
Line 834  sub plink { Line 817  sub plink {
     my ($type,$dis,$value,$marker,$return,$call)=@_;      my ($type,$dis,$value,$marker,$return,$call)=@_;
     my $winvalue=$value;      my $winvalue=$value;
     unless ($winvalue) {      unless ($winvalue) {
         if ((&isdateparm($type)) || (&is_specialstring($type))) {      if (&isdateparm($type)) {
             $winvalue=$env{'form.recent_'.$type};              $winvalue=$env{'form.recent_'.$type};
         } elsif ($type eq 'string_yesno') {  
             if ($env{'form.recent_string'} =~ /^(yes|no)$/i) {  
                 $winvalue=$env{'form.recent_string'};  
             }  
         } else {          } else {
             $winvalue=$env{'form.recent_'.(split(/\_/,$type))[0]};              $winvalue=$env{'form.recent_'.(split(/\_/,$type))[0]};
         }          }
Line 872  sub page_js { Line 851  sub page_js {
     $pjump_def      $pjump_def
   
     function psub() {      function psub() {
         var specstring = /^string_!(yesno|any)/i;  
         if (document.parmform.pres_marker.value!='') {          if (document.parmform.pres_marker.value!='') {
             document.parmform.action+='#'+document.parmform.pres_marker.value;              document.parmform.action+='#'+document.parmform.pres_marker.value;
             var typedef=new Array();              var typedef=new Array();
             typedef=document.parmform.pres_type.value.split('_');              typedef=document.parmform.pres_type.value.split('_');
             if (document.parmform.pres_type.value!='') {             if (document.parmform.pres_type.value!='') {
                 if ((typedef[0]=='date') ||              if (typedef[0]=='date') {
                     (specstring.test(document.parmform.pres_type.value)))  {                  eval('document.parmform.recent_'+
                     eval('document.parmform.recent_'+                       document.parmform.pres_type.value+
                         document.parmform.pres_type.value+               '.value=document.parmform.pres_value.value;');
                         '.value=document.parmform.pres_value.value;');              } else {
                 } else {                  eval('document.parmform.recent_'+typedef[0]+
                     eval('document.parmform.recent_'+typedef[0]+               '.value=document.parmform.pres_value.value;');
                         '.value=document.parmform.pres_value.value;');  
                 }  
             }              }
          }
             document.parmform.submit();              document.parmform.submit();
         } else {          } else {
             document.parmform.pres_value.value='';              document.parmform.pres_value.value='';
Line 929  function showHide_courseContent() { Line 906  function showHide_courseContent() {
 COURSECONTENTSCRIPT  COURSECONTENTSCRIPT
 }  }
   
 sub validateparms_js {  
     return <<'ENDSCRIPT';  
   
 function validateParms() {  
     var ipallowRegExp = /^setipallow_/;  
     var ipdenyRegExp = /^setipdeny_/;  
     var patternIP = /[\[\]\*\.a-zA-Z\d\-]+/;  
     if ((document.parmform.elements.length != 'undefined')  && (document.parmform.elements.length) != 'null') {  
         if (document.parmform.elements.length) {  
             for (i=0; i<document.parmform.elements.length; i++) {  
                 var name=document.parmform.elements[i].name;  
                 if (ipallowRegExp.test(name)) {  
                     var identifier = name.replace(ipallowRegExp,'');  
                     var possallow = document.parmform.elements[i].value;  
                     possallow = possallow.replace(/^\s+|\s+$/g,'');  
                     if (patternIP.test(possallow)) {  
                         if (document.parmform.elements['set_'+identifier].value) {  
                             possallow = ','+possallow;  
                         }  
                         document.parmform.elements['set_'+identifier].value += possallow;  
                     }  
                 } else if (ipdenyRegExp.test(name)) {  
                     var identifier = name.replace(ipdenyRegExp,'');  
                     var possdeny = document.parmform.elements[i].value;  
                     possdeny = possdeny.replace(/^\s+|\s+$/g,'');  
                     if (patternIP.test(possdeny)) {  
                         possdeny = '!'+possdeny;  
                         if (document.parmform.elements['set_'+identifier].value) {  
                             possdeny = ','+possdeny;  
                         }  
                     }  
                 }  
             }  
         }  
     }  
     return true;  
 }  
   
 ENDSCRIPT  
 }  
   
 # Javascript initialization, for overview mode  
 sub ipacc_boxes_js  {  
     my $remove = &mt('Remove');  
     return <<"END";  
 \$(document).ready(function() {  
     var wrapper         = \$(".LC_string_ipacc_wrap");  
     var add_button      = \$(".LC_add_ipacc_button");  
     var ipaccRegExp     = /^LC_string_ipacc_/;  
   
     \$(add_button).click(function(e){  
         e.preventDefault();  
         var identifier = \$(this).closest("div").attr("id");  
         identifier = identifier.replace(ipaccRegExp,'');  
         \$(this).closest('div').find('.LC_string_ipacc_inner').append('<div><input type="text" name="setip'+identifier+'" /><a href="#" class="LC_remove_ipacc">$remove</a></div>');  
     });  
   
     \$(wrapper).delegate(".LC_remove_ipacc","click", function(e){  
         e.preventDefault(); \$(this).closest("div").remove();  
     })  
 });  
   
   
 END  
 }  
   
 sub done_proctor_js {  
     return <<"END";  
 function toggleSecret(form,radio,key) {  
     var radios = form[radio+key];  
     if (radios.length) {  
         for (var i=0; i<radios.length; i++) {  
             if (radios[i].checked) {  
                 if (radios[i].value == '_done_proctor') {  
                     if (document.getElementById('done_'+key+'_proctorkey')) {  
                         document.getElementById('done_'+key+'_proctorkey').type='text';  
                     }  
                 } else {  
                     if (document.getElementById('done_'+key+'_proctorkey')) {  
                         document.getElementById('done_'+key+'_proctorkey').type='hidden';  
                         document.getElementById('done_'+key+'_proctorkey').value='';  
                     }  
                 }  
             }  
         }  
     }  
 }  
 END  
   
 }  
   
 sub startpage {  sub startpage {
     my ($r,$psymb) = @_;      my ($r,$psymb) = @_;
   
Line 1213  sub print_td { Line 1099  sub print_td {
                 $nolink = 1;                  $nolink = 1;
             }              }
         } elsif ($mprefix =~ /availablestudent\&$/) {          } elsif ($mprefix =~ /availablestudent\&$/) {
             $nolink = 1;              if ($which > 3) {
                   $nolink = 1;
               }
         } elsif ($mprefix =~ /examcode\&$/) {          } elsif ($mprefix =~ /examcode\&$/) {
             unless ($which == 2) {              unless ($which == 2) {
                 $nolink = 1;                  $nolink = 1;
Line 1391  sub isdateparm { Line 1279  sub isdateparm {
     return (($type=~/^date/) && (!($type eq 'date_interval')));      return (($type=~/^date/) && (!($type eq 'date_interval')));
 }  }
   
 # Determine if parameter type is specialized string type (i.e.,  
 # not just string or string_yesno.  
   
 sub is_specialstring {  
     my $type=shift;  
     return (($type=~/^string_/) && (($type ne 'string_yesno')));  
 }  
   
 #  #
 # parmmenu displays a list of the selected parameters.  # parmmenu displays a list of the selected parameters.
 # It also offers a link to show/hide the complete parameter list  # It also offers a link to show/hide the complete parameter list
Line 2324  sub assessparms { Line 2204  sub assessparms {
                             foreach my $role (@possroles) {                              foreach my $role (@possroles) {
                                 if (ref($sections_by_role{$role}) eq 'ARRAY') {                                  if (ref($sections_by_role{$role}) eq 'ARRAY') {
                                     my @secs = sort { $a <=> $b } @{$sections_by_role{$role}};                                      my @secs = sort { $a <=> $b } @{$sections_by_role{$role}};
                                     $csec = $secs[0];                                      $csec = $secs[0]; 
                                     last;                                      last;
                                 }                                  }
                             }                              }
Line 2368  sub assessparms { Line 2248  sub assessparms {
                                          $uname,$udom);                                           $uname,$udom);
                     }                      }
                     $message .= '</span>';                      $message .= '</span>';
                     $uname='';                      $uname=''; 
                     if ($env{'request.course.sec'} ne '') {                      if ($env{'request.course.sec'} ne '') {
                         $csec=$env{'request.course.sec'};                          $csec=$env{'request.course.sec'};
                     } else {                      } else {
Line 2390  sub assessparms { Line 2270  sub assessparms {
             if ($uname ne '') {              if ($uname ne '') {
                 my %name=&Apache::lonnet::userenvironment($udom,$uname,                  my %name=&Apache::lonnet::userenvironment($udom,$uname,
                   ('firstname','middlename','lastname','generation','id'));                    ('firstname','middlename','lastname','generation','id'));
                 $message .= "\n<p>\n".&mt('Full Name').': '                   $message .= "\n<p>\n".&mt('Full Name').': '
                             .$name{'firstname'}.' '.$name{'middlename'}.' '                              .$name{'firstname'}.' '.$name{'middlename'}.' '
                             .$name{'lastname'}.' '.$name{'generation'}                              .$name{'lastname'}.' '.$name{'generation'}
                             ."<br />\n".&mt('Student/Employee ID').': '.$name{'id'}.'</p>';                              ."<br />\n".&mt('Student/Employee ID').': '.$name{'id'}.'</p>';
Line 2526  sub assessparms { Line 2406  sub assessparms {
   
     &startpage($r,$pssymb);      &startpage($r,$pssymb);
   
     foreach my $item ('tolerance','date_default','date_start','date_end',      foreach ('tolerance','date_default','date_start','date_end',
                       'date_interval','int','float','string','string_lenient',          'date_interval','int','float','string') {
                       'string_examcode','string_deeplink','string_discussvote',  
                       'string_useslots','string_problemstatus','string_ip',  
                       'string_questiontype') {  
         $r->print('<input type="hidden" value="'.          $r->print('<input type="hidden" value="'.
           &HTML::Entities::encode($env{'form.recent_'.$item},'"&<>').            &HTML::Entities::encode($env{'form.recent_'.$_},'"&<>').
           '" name="recent_'.$item.'" />');            '" name="recent_'.$_.'" />');
     }      }
   
     # ----- Start Parameter Selection      # ----- Start Parameter Selection
Line 3145  sub storedata { Line 3022  sub storedata {
     if ($key =~ /^form\.([a-z]+)\_(.+)$/) {      if ($key =~ /^form\.([a-z]+)\_(.+)$/) {
         my $cmd=$1;          my $cmd=$1;
         my $thiskey=$2;          my $thiskey=$2;
         next if ($cmd eq 'setipallow' || $cmd eq 'setipdeny');  
         my ($tuname,$tudom)=&extractuser($thiskey);          my ($tuname,$tudom)=&extractuser($thiskey);
         my $tkey=$thiskey;          my $tkey=$thiskey;
             if ($tuname) {              if ($tuname) {
Line 3376  sub listdata { Line 3252  sub listdata {
         ($thiskey=~/^$env{'request.course.id'}\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/);          ($thiskey=~/^$env{'request.course.id'}\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/);
         my $section=&mt('All Students');          my $section=&mt('All Students');
         $readonly = $readonlyall;          $readonly = $readonlyall;
         my $userscope;  
         my $showval = $$resourcedata{$thiskey};  
         if ($middle=~/^\[(.*)\]/) {          if ($middle=~/^\[(.*)\]/) {
             my $issection=$1;              my $issection=$1;
             if ($issection=~/^useropt\:($match_username)\:($match_domain)/) {              if ($issection=~/^useropt\:($match_username)\:($match_domain)/) {
Line 3390  sub listdata { Line 3264  sub listdata {
                     }                      }
                 }                  }
                 $section=&mt('User').": ".&Apache::loncommon::plainname($1,$2);                  $section=&mt('User').": ".&Apache::loncommon::plainname($1,$2);
                 $userscope = 1;  
             } else {              } else {
                 if (($env{'request.course.sec'} ne '') && ($caller eq 'overview')) {                  if (($env{'request.course.sec'} ne '') && ($caller eq 'overview')) {
                     if (exists($grouphash{$issection})) {                      if (exists($grouphash{$issection})) {
Line 3455  sub listdata { Line 3328  sub listdata {
               '<td><b>'.&mt($parmitem).                '<td><b>'.&mt($parmitem).
               '</b></td>');                '</b></td>');
         unless ($readonly) {          unless ($readonly) {
             my $disabled;  
             if (($name eq 'availablestudent') &&  
                 (($showval eq '') || ($userscope))) {  
                 $disabled = ' disabled="disabled"';  
             }  
             $r->print('<td><input type="checkbox" name="del_'.              $r->print('<td><input type="checkbox" name="del_'.
                       $thiskey.'"'.$disabled.' /></td>');                        $thiskey.'" /></td>');
         }          }
         $r->print('<td>');          $r->print('<td>');
         $foundkeys++;          $foundkeys++;
Line 3486  sub listdata { Line 3354  sub listdata {
               );                );
             }              }
         } elsif ($thistype eq 'date_interval') {          } elsif ($thistype eq 'date_interval') {
             $r->print(&date_interval_selector($thiskey,$name,              $r->print(&date_interval_selector($thiskey,
                       $$resourcedata{$thiskey},$readonly));                        $$resourcedata{$thiskey},$readonly));
         } elsif ($thistype =~ m/^string/) {          } elsif ($thistype =~ m/^string/) {
             if ($name eq 'availablestudent') {  
                 $readonly = 1;  
             }  
             $r->print(&string_selector($thistype,$thiskey,              $r->print(&string_selector($thistype,$thiskey,
                       $$resourcedata{$thiskey},$name,$readonly));                        $$resourcedata{$thiskey},$name,$readonly));
         } else {          } else {
Line 3509  sub listdata { Line 3374  sub listdata {
   
   
 sub date_interval_selector {  sub date_interval_selector {
     my ($thiskey, $pname, $showval, $readonly) = @_;      my ($thiskey, $showval, $readonly) = @_;
     my ($result,%skipval);      my $result;
     my $currval = $showval;  
     foreach my $which (['days', 86400, 31],      foreach my $which (['days', 86400, 31],
                ['hours', 3600, 23],                 ['hours', 3600, 23],
                ['minutes', 60, 59],                 ['minutes', 60, 59],
Line 3525  sub date_interval_selector { Line 3389  sub date_interval_selector {
                            \%select,'',$readonly);                             \%select,'',$readonly);
     $result .= ' '.&mt($name);      $result .= ' '.&mt($name);
     }      }
     if ($pname eq 'interval') {  
         unless ($skipval{'done'}) {  
             my $checkedon = '';  
             my $checkedproc = '';  
             my $currproctorkey = '';  
             my $currprocdisplay = 'hidden';  
             my $currdonetext = &mt('Done');  
             my $checkedoff = ' checked="checked"';  
             if ($currval =~ /^(?:\d+)_done$/) {  
                 $checkedon = ' checked="checked"';  
                 $checkedoff = '';  
             } elsif ($currval =~ /^(?:\d+)_done\:([^\:]+)\:$/) {  
                 $currdonetext = $1;  
                 $checkedon = ' checked="checked"';  
                 $checkedoff = '';  
             } elsif ($currval =~ /^(?:\d+)_done_proctor_(.+)$/) {  
                 $currproctorkey = $1;  
                 $checkedproc = ' checked="checked"';  
                 $checkedoff = '';  
                 $currprocdisplay = 'text';  
             } elsif ($currval =~ /^(?:\d+)_done\:([^\:]+)\:_proctor_(.+)$/) {  
                 $currdonetext = $1;  
                 $currproctorkey = $2;  
                 $checkedproc = ' checked="checked"';  
                 $checkedoff = '';  
                 $currprocdisplay = 'text';  
             }  
             my $onclick = ' onclick="toggleSecret(this.form,'."'done_','$thiskey'".');"';  
             my $disabled;  
             if ($readonly) {  
                 $disabled = ' disabled="disabled"';  
             }  
             $result .= '<br /><span class="LC_nobreak">'.&mt('Include "done" button').  
                        '<label><input type="radio" value="" name="done_'.$thiskey.'"'.$checkedoff.$onclick.$disabled.' />'.  
                        &mt('No').'</label>'.('&nbsp;'x2).  
                        '<label><input type="radio" value="_done" name="done_'.$thiskey.'"'.$checkedon.$onclick.$disabled.' />'.  
                        &mt('Yes').'</label>'.('&nbsp;'x2).  
                        '<label><input type="radio" value="_done_proctor" name="done_'.$thiskey.'"'.$checkedproc.$onclick.$disabled.' />'.  
                        &mt('Yes, with proctor key').'</label>'.  
                        '<input type="'.$currprocdisplay.'" id="done_'.$thiskey.'_proctorkey" '.  
                        'name="done_'.$thiskey.'_proctorkey" value="'.&HTML::Entities::encode($currproctorkey,'"<>&').'"'.$disabled.' /></span><br />'.  
                        '<span class="LC_nobreak">'.&mt('Button text').': '.  
                        '<input type="text" name="done_'.$thiskey.'_buttontext" value="'.&HTML::Entities::encode($currdonetext,'"<>&').'"'.$disabled.' /></span>';  
         }  
     }  
     unless ($readonly) {      unless ($readonly) {
         $result .= '<input type="hidden" name="dateinterval_'.$thiskey.'" />';          $result .= '<input type="hidden" name="dateinterval_'.$thiskey.'" />';
     }      }
Line 3602  sub default_selector { Line 3421  sub default_selector {
     return '<input type="text" name="set_'.$thiskey.'" value="'.$showval.'"'.$disabled.' />';      return '<input type="text" name="set_'.$thiskey.'" value="'.$showval.'"'.$disabled.' />';
 }  }
   
 sub string_ip_selector {  
     my ($thiskey, $showval, $readonly) = @_;  
     my %access = (  
                    allow => [],  
                    deny  => [],  
                  );  
     if ($showval ne '') {  
         my @current;  
         if ($showval =~ /,/) {  
             @current = split(/,/,$showval);  
         } else {  
             @current = ($showval);  
         }  
         foreach my $item (@current) {  
             if ($item =~ /^\!([\[\]a-zA-Z\.\d\*\-]+)$/) {  
                 push(@{$access{'deny'}},$1);  
             } elsif ($item =~ /^([\[\]a-zA-Z\.\d\*\-]+)$/) {  
                 push(@{$access{'allow'}},$item);  
             }  
         }  
     }  
     if (!@{$access{'allow'}}) {  
         @{$access{'allow'}} = ('');  
     }  
     if (!@{$access{'deny'}}) {  
         @{$access{'deny'}} = ('');  
     }  
     my ($disabled,$addmore);  
     if ($readonly) {  
         $disabled=' disabled="disabled"';  
     } else {  
         $addmore = "\n".'<button class="LC_add_ipacc_button">'.&mt('Add more').'</button>';  
     }  
     my $output = '<input type="hidden" name="set_'.$thiskey.'" />  
 <table><tr><th>'.&mt('Allow from').'</th><th>'.&mt('Deny from').'</th></tr><tr>';  
     foreach my $acctype ('allow','deny') {  
         $output .= '  
 <td valign="top">  
 <div class="LC_string_ipacc_wrap" id="LC_string_ipacc_'.$acctype.'_'.$thiskey.'">  
   <div class="LC_string_ipacc_inner">'."\n";  
         my $num = 0;  
         foreach my $curr (@{$access{$acctype}}) {  
             $output .= '<div><input type="text" name="setip'.$acctype.'_'.$thiskey.'" value="'.$curr.'"'.$disabled.' />';  
             if ($num > 0) {  
                 $output .= '<a href="#" class="LC_remove_ipacc">'.&mt('Remove').'</a>';  
             }  
             $output .= '</div>'."\n";  
             $num ++;  
         }  
         $output .= '  
   </div>'.$addmore.'  
 </div>  
 </td>';  
    }  
    $output .= '  
 </tr>  
 </table>'."\n";  
     return $output;  
 }  
   
 {  
   
 my %strings =  my %strings =
     (      (
      'string_yesno'       'string_yesno'
Line 3691  my %strings = Line 3448  my %strings =
              => [['yes','Yes'],               => [['yes','Yes'],
                  ['notended','Yes, unless discussion ended'],                   ['notended','Yes, unless discussion ended'],
                  ['no','No']],                   ['no','No']],
      'string_ip'  
              => [['_allowfrom_','Hostname(s), or IP(s) from which access is allowed'],  
                  ['_denyfrom_','Hostname(s) or IP(s) from which access is disallowed']],  
      );       );
   
 sub standard_string_options {  sub standard_string_options {
Line 3734  sub string_selector { Line 3488  sub string_selector {
             }              }
         }          }
     }      }
   
     if ($thistype eq 'string_ip') {  
         return &string_ip_selector($thiskey,$showval,$readonly);  
     }  
     
     my ($result,$disabled);      my ($result,$disabled);
   
Line 3792  sub string_selector { Line 3542  sub string_selector {
     return $result;      return $result;
 }  }
   
 sub oldversion_warning {  
     my ($name,$value,$chostname,$cmajor,$cminor,$needsrelease) = @_;  
     my $desc;  
     my %stringtypes = (  
                         type         => 'string_questiontype',  
                         lenient      => 'string_lenient',  
                         retrypartial => 'string_yesno',  
                         discussvote  => 'string_discussvote',  
                         examcode     => 'string_examcode',  
                       );  
     if (exists($stringtypes{$name})) {  
         if ($name eq 'examcode') {  
             $desc = $value;  
         } elsif (ref($strings{$stringtypes{$name}}) eq 'ARRAY') {  
             foreach my $possibilities (@{ $strings{$stringtypes{$name}} }) {  
                 next unless (ref($possibilities) eq 'ARRAY');  
                 my ($parmval, $description) = @{ $possibilities };  
                 if ($parmval eq $value) {  
                     $desc = $description;  
                     last;  
                 }  
             }  
         }  
     } elsif (($name eq 'printstartdate') || ($name eq 'printenddate')) {  
         my $now = time;  
         if ($value =~ /^\d+$/) {  
             if ($name eq 'printstartdate') {  
                 if ($value > $now) {  
                     $desc = &Apache::lonlocal::locallocaltime($value);  
                 }  
             } elsif ($name eq 'printenddate') {  
                 if ($value < $now) {  
                     $desc = &Apache::lonlocal::locallocaltime($value);  
                 }  
             }  
         }  
     }  
     my $standard_name = &standard_parameter_names($name);  
     return '<p class="LC_warning">'.  
            &mt('[_1] was [_2]not[_3] set to [_4].',  
                $standard_name,'<b>','</b>','"'.$desc.'"').'<br />'.  
            &mt('LON-CAPA version ([_1]) installed on home server ([_2]) does not meet version requirements ([_3] or newer).',  
            $cmajor.'.'.$cminor,$chostname,  
            $needsrelease).  
            '</p>';  
 }  
   
 }  
   
 #  #
 # Shift all start and end dates by $shift  # Shift all start and end dates by $shift
 #  #
Line 3914  sub newoverview { Line 3615  sub newoverview {
 '.  '.
             &Apache::lonhtmlcommon::resize_scrollbox_js('params')."\n".              &Apache::lonhtmlcommon::resize_scrollbox_js('params')."\n".
             &showhide_js()."\n".              &showhide_js()."\n".
             &done_proctor_js()."\n".  
 '// ]]>  '// ]]>
 </script>  </script>
 ';  ';
Line 4104  sub overview { Line 3804  sub overview {
     my ($r,$parm_permission) = @_;      my ($r,$parm_permission) = @_;
     my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};      my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};      my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
     my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'};  
     my $js = '<script type="text/javascript">'."\n".  
              '// <![CDATA['."\n".  
              &done_proctor_js()."\n".  
              '// ]]>'."\n".  
              '</script>'."\n";  
     my $readonly = 1;      my $readonly = 1;
     if ($parm_permission->{'edit'}) {      if ($parm_permission->{'edit'}) {
         undef($readonly);          undef($readonly);
     }      }
     &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview',      &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview',
     text=>"Overview Mode"});      text=>"Overview Mode"});
     my $start_page=&Apache::loncommon::start_page('Modify Parameters',$js);      my $start_page=&Apache::loncommon::start_page('Modify Parameters');
     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Overview');      my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Overview');
     $r->print($start_page.$breadcrumbs);      $r->print($start_page.$breadcrumbs);
     $r->print('<form method="post" action="/adm/parmset?action=setoverview" name="parmform">');      $r->print('<form method="post" action="/adm/parmset?action=setoverview" name="parmform">');
Line 5414  sub parameter_releasecheck { Line 5108  sub parameter_releasecheck {
     return $needsnewer;      return $needsnewer;
 }  }
   
   sub oldversion_warning {
       my ($name,$value,$chostname,$cmajor,$cminor,$needsrelease) = @_;
       my $desc;
       my %stringtypes = (
                           type         => 'string_questiontype',
                           lenient      => 'string_lenient',
                           retrypartial => 'string_yesno',
                           discussvote  => 'string_discussvote',
                           examcode     => 'string_examcode',
                         );
       if (exists($stringtypes{$name})) {
           if ($name eq 'examcode') {
               $desc = $value;
           } elsif (ref($strings{$stringtypes{$name}}) eq 'ARRAY') {
               foreach my $possibilities (@{ $strings{$stringtypes{$name}} }) {
                   next unless (ref($possibilities) eq 'ARRAY');
                   my ($parmval, $description) = @{ $possibilities };
                   if ($parmval eq $value) {
                       $desc = $description;
                       last;
                   }
               }
           }
       } elsif (($name eq 'printstartdate') || ($name eq 'printenddate')) {
           my $now = time;
           if ($value =~ /^\d+$/) {
               if ($name eq 'printstartdate') {
                   if ($value > $now) {
                       $desc = &Apache::lonlocal::locallocaltime($value);
                   }
               } elsif ($name eq 'printenddate') {
                   if ($value < $now) {
                       $desc = &Apache::lonlocal::locallocaltime($value);
                   }
               }
           }
       }
       my $standard_name = &standard_parameter_names($name);
       return '<p class="LC_warning">'.
              &mt('[_1] was [_2]not[_3] set to [_4].',
                  $standard_name,'<b>','</b>','"'.$desc.'"').'<br />'.
              &mt('LON-CAPA version ([_1]) installed on home server ([_2]) does not meet version requirements ([_3] or newer).',
              $cmajor.'.'.$cminor,$chostname,
              $needsrelease).
              '</p>';
   }
   
 sub get_permission {  sub get_permission {
     my %permission;      my %permission;
     my $allowed = 0;      my $allowed = 0;

Removed from v.1.522.2.26.2.3  
changed lines
  Added in v.1.522.2.27


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