Diff for /loncom/interface/lonparmset.pm between versions 1.590 and 1.595

version 1.590, 2019/02/18 13:46:05 version 1.595, 2020/02/10 19:48:56
Line 976  sub storeparm_by_symb_inner { Line 976  sub storeparm_by_symb_inner {
 #  #
 # @param {string} $value - the parameter value  # @param {string} $value - the parameter value
 # @param {string} $type - the parameter type  # @param {string} $type - the parameter type
 # @param {string} $name - the parameter name (unused)  
 # @param {boolean} $editable - Set to true to get an icon when no value is defined.  # @param {boolean} $editable - Set to true to get an icon when no value is defined.
 sub valout {  sub valout {
     my ($value,$type,$name,$editable)=@_;      my ($value,$type,$name,$editable)=@_;
Line 1071  sub plink { Line 1070  sub plink {
     my ($type,$dis,$value,$marker,$return,$call,$recursive,$extra)=@_;      my ($type,$dis,$value,$marker,$return,$call,$recursive,$extra)=@_;
     my $winvalue=$value;      my $winvalue=$value;
     unless ($winvalue) {      unless ($winvalue) {
         if ((&isdateparm($type) || (&is_specialstring($type))) {          if (&isdateparm($type) || (&is_specialstring($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 1080  sub plink { Line 1083  sub plink {
     my ($parmname)=((split(/\&/,$marker))[1]=~/\_([^\_]+)$/);      my ($parmname)=((split(/\&/,$marker))[1]=~/\_([^\_]+)$/);
     my ($hour,$min,$sec,$val)=&preset_defaults($parmname);      my ($hour,$min,$sec,$val)=&preset_defaults($parmname);
     unless (defined($winvalue)) { $winvalue=$val; }      unless (defined($winvalue)) { $winvalue=$val; }
     my $valout = &valout($value,$type,$parmname,1);      my $valout = &valout($value,$type,1);
     my $unencmarker = $marker;      my $unencmarker = $marker;
     foreach my $item (\$type, \$dis, \$winvalue, \$marker, \$return, \$call,      foreach my $item (\$type, \$dis, \$winvalue, \$marker, \$return, \$call,
               \$hour, \$min, \$sec, \$extra) {                \$hour, \$min, \$sec, \$extra) {
Line 1108  sub page_js { Line 1111  sub page_js {
     $pjump_def      $pjump_def
   
     function psub() {      function psub() {
         var specstring = /^string_/i;          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) && (typedef[1]!='yesno')))  {                      (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;');
Line 1712  sub print_row { Line 1715  sub print_row {
             }              }
         }          }
         my ($parmname)=($thismarker=~/\_([^\_]+)$/);          my ($parmname)=($thismarker=~/\_([^\_]+)$/);
         $effective_parm = &valout($recursinfo->[0],$recursinfo->[1],$parmname);          $effective_parm = &valout($recursinfo->[0],$recursinfo->[1]);
         $r->print('<td style="background-color:#CCCCFF;" align="center">'.$effective_parm.          $r->print('<td style="background-color:#CCCCFF;" align="center">'.$effective_parm.
                   '<br /><span class="LC_parm_recursive">'.$rectitle.'&nbsp;'.                    '<br /><span class="LC_parm_recursive">'.$rectitle.'&nbsp;'.
                   $effparm_level.'</span></td>');                    $effparm_level.'</span></td>');
     } else {      } else {
         if ($result) {          if ($result) {
             $effective_parm = &valout($outpar[$result],$typeoutpar[$result],$parmname);              $effective_parm = &valout($outpar[$result],$typeoutpar[$result]);
         }          }
         if ($eff_groupparm) {          if ($eff_groupparm) {
             $effective_parm = $eff_groupparm;              $effective_parm = $eff_groupparm;
Line 1735  sub print_row { Line 1738  sub print_row {
             $sessionvaltype=$$defaulttype{$which};              $sessionvaltype=$$defaulttype{$which};
         }          }
         $r->print('<td style="background-color:#999999;" align="center"><font color="#FFFFFF">'.          $r->print('<td style="background-color:#999999;" align="center"><font color="#FFFFFF">'.
                   &valout($sessionval,$sessionvaltype,$$name{$which}).'&nbsp;'.                    &valout($sessionval,$sessionvaltype).'&nbsp;'.
                   '</font></td>');                    '</font></td>');
     }      }
     $r->print('</tr>');      $r->print('</tr>');
Line 1816  sub print_td { Line 1819  sub print_td {
     }      }
     if ($nolink) {      if ($nolink) {
         my ($parmname)=((split(/\&/,$mprefix))[1]=~/\_([^\_]+)$/);          my ($parmname)=((split(/\&/,$mprefix))[1]=~/\_([^\_]+)$/);
         $r->print(&valout($currval,$currtype,$parmname));          $r->print(&valout($currval,$currtype));
     } else {      } else {
         $r->print(&plink($currtype,          $r->print(&plink($currtype,
                          $$display{$value},$currval,                           $$display{$value},$currval,
Line 1856  sub check_other_groups { Line 1859  sub check_other_groups {
         if ($result > 3) {          if ($result > 3) {
             $bgcolor = '#AAFFAA';              $bgcolor = '#AAFFAA';
         }          }
         $grp_parm = &valout($coursereply,$resulttype,$parmname);          $grp_parm = &valout($coursereply,$resulttype);
         $output = '<td style="background-color:'.$bgcolor.';" align="center">';          $output = '<td style="background-color:'.$bgcolor.';" align="center">';
         if ($resultgroup && $resultlevel) {          if ($resultgroup && $resultlevel) {
             if ($resultlevel eq 'recursive') {              if ($resultlevel eq 'recursive') {
Line 3067  sub assessparms { Line 3070  sub assessparms {
                         "'".$uname."'","'".$udom."'").                          "'".$uname."'","'".$udom."'").
                     '</p>';                      '</p>';
                 $uname='';                  $uname='';
                 $csec=$env{'form.csec'};                  if ($env{'request.course.sec'} ne '') {
                       $csec=$env{'request.course.sec'};
                   } else {
                       $csec=$env{'form.csec'};
                   }
                   $cgroup=$env{'form.cgroup'};
               } elsif ($env{'request.course.sec'} ne '') {
                   if ($csec ne $env{'request.course.sec'}) {
                       $message='<span class="LC_error">'.
                                 &mt("User '[_1]' at domain '[_2]' not in section '[_3]'",
                                     $uname,$udom,$env{'request.course.sec'}).
                                 '</span>';
                       $uname='';
                       $csec=$env{'request.course.sec'};
                   }
                 $cgroup=$env{'form.cgroup'};                  $cgroup=$env{'form.cgroup'};
             } else {              } else {
                 my %name=&Apache::lonnet::userenvironment($udom,$uname,                  my %name=&Apache::lonnet::userenvironment($udom,$uname,
Line 4385  sub listdata { Line 4402  sub listdata {
     $tableopen=0;      $tableopen=0;
     my $foundkeys=0;      my $foundkeys=0;
     my %keyorder=&standardkeyorder();      my %keyorder=&standardkeyorder();
       my $readonlyall = $readonly;
   
     my ($secidx,%grouphash);      my ($secidx,%grouphash);
     if (($env{'request.course.sec'} ne '') && ($caller eq 'overview')) {      if (($env{'request.course.sec'} ne '') && ($caller eq 'overview')) {
Line 4446  sub listdata { Line 4464  sub listdata {
             my ($middle,$part,$name)=              my ($middle,$part,$name)=
                 ($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;
             my $showval = $$resourcedata{$thiskey};               my $showval = $$resourcedata{$thiskey}; 
             if ($middle=~/^\[(.*)\]/) {              if ($middle=~/^\[(.*)\]/) {
                 my $issection=$1;                  my $issection=$1;
Line 5382  sub oldversion_warning { Line 5401  sub oldversion_warning {
 # @param {integer} $shift - time to shift, in seconds  # @param {integer} $shift - time to shift, in seconds
 # @returns {string} - error name or 'ok'  # @returns {string} - error name or 'ok'
 sub dateshift {  sub dateshift {
     my ($shift)=@_;      my ($shift,$numchanges)=@_;
     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 $sec = $env{'request.course.sec'};
       my $secgrpregex;
       if ($sec ne '') {
           my @groups;
           if ($env{'request.course.groups'} ne '') {
               @groups = split(/:/,$env{'request.course.groups'});
           }
           if (@groups) {
               $secgrpregex = '(?:'.join('|',($sec,@groups)).')';
           } else {
               $secgrpregex = $sec;
           }
       }
     my %data=&Apache::lonnet::dump('resourcedata',$dom,$crs);      my %data=&Apache::lonnet::dump('resourcedata',$dom,$crs);
 # ugly retro fix for broken version of types  # ugly retro fix for broken version of types
     foreach my $key (keys(%data)) {      foreach my $key (keys(%data)) {
Line 5399  sub dateshift { Line 5431  sub dateshift {
 # go through all parameters and look for dates  # go through all parameters and look for dates
     foreach my $key (keys(%data)) {      foreach my $key (keys(%data)) {
        if ($data{$key.'.type'}=~/^date_(start|end)$/) {         if ($data{$key.'.type'}=~/^date_(start|end)$/) {
             if ($sec ne '') {
                 next unless ($key =~ /^$env{'request.course.id'}\.\[$secgrpregex\]\./);
             }
           my $newdate=$data{$key}+$shift;            my $newdate=$data{$key}+$shift;
             $$numchanges ++;
           $storecontent{$key}=$newdate;            $storecontent{$key}=$newdate;
        }         }
     }      }
Line 5811  sub date_shift_one { Line 5847  sub date_shift_one {
     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 $crstype = $env{'course.'.$env{'request.course.id'}.'.type'};
       my $sec = $env{'request.course.sec'};
     &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=dateshift1&timebase='.$env{'form.timebase'},      &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=dateshift1&timebase='.$env{'form.timebase'},
         text=>"Shifting Dates"});          text=>"Shifting Dates"});
       my $submit_text = &mt('Shift all dates accordingly');
       if ($sec ne '') {
           my @groups;
           if ($env{'request.course.groups'} ne '') {
               @groups = split(/:/,$env{'request.course.groups'});
           }
           if (@groups) {
               $submit_text = &mt("Shift dates set just for your section/group(s), accordingly");
           } else {
               $submit_text = &mt("Shift dates set just for your section, accordingly");
           }
       }
     my $start_page=&Apache::loncommon::start_page('Shift Dates');      my $start_page=&Apache::loncommon::start_page('Shift Dates');
     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Shift');      my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Shift');
     $r->print($start_page.$breadcrumbs);      $r->print($start_page.$breadcrumbs);
Line 5829  sub date_shift_one { Line 5877  sub date_shift_one {
               '</td></tr></table>'.                '</td></tr></table>'.
               '<input type="hidden" name="action" value="dateshift2" />'.                '<input type="hidden" name="action" value="dateshift2" />'.
               '<input type="hidden" name="timebase" value="'.$env{'form.timebase'}.'" />'.                '<input type="hidden" name="timebase" value="'.$env{'form.timebase'}.'" />'.
               '<input type="submit" value="'.&mt('Shift all dates accordingly').'" /></form>');                '<input type="submit" value="'.$submit_text.'" /></form>');
     &endSettingsScreen($r);      &endSettingsScreen($r);
     $r->print(&Apache::loncommon::end_page());      $r->print(&Apache::loncommon::end_page());
 }  }
Line 5841  sub date_shift_two { Line 5889  sub date_shift_two {
     my ($r) = @_;      my ($r) = @_;
     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 $sec = $env{'request.course.sec'};
     my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'};      my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'};
     &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=dateshift1&timebase='.$env{'form.timebase'},      &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=dateshift1&timebase='.$env{'form.timebase'},
         text=>"Shifting Dates"});          text=>"Shifting Dates"});
Line 5849  sub date_shift_two { Line 5898  sub date_shift_two {
     $r->print($start_page.$breadcrumbs);      $r->print($start_page.$breadcrumbs);
     &startSettingsScreen($r,'parmset',$crstype);      &startSettingsScreen($r,'parmset',$crstype);
     my $timeshifted=&Apache::lonhtmlcommon::get_date_from_form('timeshifted');      my $timeshifted=&Apache::lonhtmlcommon::get_date_from_form('timeshifted');
     $r->print('<h2>'.&mt('Shift Dates').'</h2>'.      $r->print('<h2>'.&mt('Shift Dates').'</h2>');
               '<p>'.&mt('Shifting all dates such that [_1] becomes [_2]',      if ($sec ne '') {
               &Apache::lonlocal::locallocaltime($env{'form.timebase'}),          my @groups;
               &Apache::lonlocal::locallocaltime($timeshifted)).'</p>');          if ($env{'request.course.groups'} ne '') {
               @groups = split(/:/,$env{'request.course.groups'});
           }
           if (@groups) {
               $r->print('<p>'.
                         &mt("Shift dates set just for your section/group(s), such that [_1] becomes [_2]",
                             &Apache::lonlocal::locallocaltime($env{'form.timebase'}),
                             &Apache::lonlocal::locallocaltime($timeshifted)).
                         '</p>');
           } else {
               $r->print('<p>'.
                         &mt("Shift dates set just for your section, such that [_1] becomes [_2]",
                             &Apache::lonlocal::locallocaltime($env{'form.timebase'}),
                             &Apache::lonlocal::locallocaltime($timeshifted)).
                         '</p>');
           }
       } else {
           $r->print('<p>'.&mt('Shifting all dates such that [_1] becomes [_2]',
                               &Apache::lonlocal::locallocaltime($env{'form.timebase'}),
                               &Apache::lonlocal::locallocaltime($timeshifted)).
                     '</p>');
       }
     my $delta=$timeshifted-$env{'form.timebase'};      my $delta=$timeshifted-$env{'form.timebase'};
     &dateshift($delta);      my $numchanges = 0;
       my $result = &dateshift($delta,\$numchanges);
       if ($result eq 'ok') {
           $r->print(
               &Apache::lonhtmlcommon::confirm_success(&mt('Completed shifting of [quant,_1,date setting]',
                                                       $numchanges)));
       } elsif ($result eq 'con_delayed') {
           $r->print(
               &Apache::lonhtmlcommon::confirm_success(&mt('Queued shifting of [quant,_1,date setting]',
                                                           $numchanges)));
       } else {
           $r->print(
               &Apache::lonhtmlcommon::confirm_success(&mt('An error occurred attempting to shift dates'),1));
       }
     $r->print(      $r->print(
         &Apache::lonhtmlcommon::confirm_success(&mt('Done')).  
         '<br /><br />'.          '<br /><br />'.
         &Apache::lonhtmlcommon::actionbox(          &Apache::lonhtmlcommon::actionbox(
             ['<a href="/adm/parmset">'.&mt('Content and Problem Settings').'</a>']));              ['<a href="/adm/parmset">'.&mt('Content and Problem Settings').'</a>']));
Line 6806  sub parm_change_log { Line 6888  sub parm_change_log {
         }          }
         if ($last) { ($folder) = &Apache::lonnet::decode_symb($last); }          if ($last) { ($folder) = &Apache::lonnet::decode_symb($last); }
     }      }
       my $numgroups = 0;
       my @groups;
       if ($env{'request.course.groups'} ne '') {
           @groups = split(/:/,$env{'request.course.groups'});
           $numgroups = scalar(@groups);
       }
     foreach my $id (sort {      foreach my $id (sort {
                 if ($parmlog{$b}{'exe_time'} ne $parmlog{$a}{'exe_time'}) {                  if ($parmlog{$b}{'exe_time'} ne $parmlog{$a}{'exe_time'}) {
                     return $parmlog{$b}{'exe_time'} <=>$parmlog{$a}{'exe_time'}                      return $parmlog{$b}{'exe_time'} <=>$parmlog{$a}{'exe_time'}
Line 6845  sub parm_change_log { Line 6933  sub parm_change_log {
             my ($realm,$section,$parmname,$part,$what,$middle,$uname,$udom,$issection,$realmdescription)=              my ($realm,$section,$parmname,$part,$what,$middle,$uname,$udom,$issection,$realmdescription)=
                 &components($changed,$parmlog{$id}{'uname'},$parmlog{$id}{'udom'},$typeflag);                  &components($changed,$parmlog{$id}{'uname'},$parmlog{$id}{'udom'},$typeflag);
             if ($env{'request.course.sec'} ne '') {              if ($env{'request.course.sec'} ne '') {
                 next if (($issection ne '') && ($issection ne $env{'request.course.sec'}));                  next if (($issection ne '') && (!(($issection eq $env{'request.course.sec'}) ||
                                                     ($numgroups && (grep(/^\Q$issection\E$/,@groups))))));
                 if ($uname ne '') {                  if ($uname ne '') {
                     my $stusection = &Apache::lonnet::getsection($uname,$udom,$env{'request.course.id'});                      my $stusection = &Apache::lonnet::getsection($uname,$udom,$env{'request.course.id'});
                     next if (($stusection ne '-1') && ($stusection ne $env{'request.course.sec'}));                       next if (($stusection ne '-1') && ($stusection ne $env{'request.course.sec'})); 

Removed from v.1.590  
changed lines
  Added in v.1.595


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