Diff for /loncom/interface/courseprefs.pm between versions 1.49.2.28 and 1.49.2.31

version 1.49.2.28, 2021/12/24 21:09:09 version 1.49.2.31, 2024/07/06 16:43:10
Line 543  sub handler { Line 543  sub handler {
                                                   $cnum,undef,\@allitems,                                                    $cnum,undef,\@allitems,
                                                   'coursepref',$parm_permission);                                                    'coursepref',$parm_permission);
     } elsif (($phase eq 'display') && ($parm_permission->{'display'})) {      } elsif (($phase eq 'display') && ($parm_permission->{'display'})) {
         my $jscript = &get_jscript($cid,$cdom,$phase,$crstype,\%values);          my $noedit;
           if (ref($parm_permission) eq 'HASH') {
               unless ($parm_permission->{'process'}) {
                   $noedit = 1;
               }
           }
           my $jscript = &get_jscript($cid,$cdom,$phase,$crstype,\%values,$noedit);
         my @allitems = &get_allitems(%prefs);          my @allitems = &get_allitems(%prefs);
         &Apache::lonconfigsettings::display_settings($r,$cdom,$phase,$context,          &Apache::lonconfigsettings::display_settings($r,$cdom,$phase,$context,
             \@prefs_order,\%prefs,\%values,undef,$jscript,\@allitems,$crstype,              \@prefs_order,\%prefs,\%values,$cnum,$jscript,\@allitems,$crstype,
             'coursepref',$parm_permission);              'coursepref',$parm_permission);
     } else {      } else {
         &Apache::lonconfigsettings::display_choices($r,$phase,$context,          &Apache::lonconfigsettings::display_choices($r,$phase,$context,
Line 599  sub get_allitems { Line 605  sub get_allitems {
 }  }
   
 sub print_config_box {  sub print_config_box {
     my ($r,$cdom,$phase,$action,$item,$settings,$allitems,$crstype,$parm_permission) = @_;      my ($r,$cdom,$cnum,$phase,$action,$item,$settings,$allitems,$crstype,$parm_permission) = @_;
     my $ordered = $item->{'ordered'};      my $ordered = $item->{'ordered'};
     my $itemtext = $item->{'itemtext'};      my $itemtext = $item->{'itemtext'};
     my $noedit;      my $noedit;
Line 716  sub print_config_box { Line 722  sub print_config_box {
     } elsif ($action eq 'appearance') {      } elsif ($action eq 'appearance') {
         $output .= &print_appearance($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit);          $output .= &print_appearance($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit);
     } elsif ($action eq 'grading') {      } elsif ($action eq 'grading') {
         $output .= &print_grading($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit);          $output .= &print_grading($cdom,$cnum,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit);
     } elsif ($action eq 'printouts') {      } elsif ($action eq 'printouts') {
         $output .= &print_printouts($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit);          $output .= &print_printouts($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit);
     } elsif ($action eq 'spreadsheet') {      } elsif ($action eq 'spreadsheet') {
Line 944  sub process_changes { Line 950  sub process_changes {
                                         $autocoowner = $domconf{'autoenroll'}{'co-owners'};                                          $autocoowner = $domconf{'autoenroll'}{'co-owners'};
                                     }                                      }
                                 }                                  }
                                 unless ($autocoowner) {                                  if ($autocoowner) {
                                       $newvalues{'co-owners'} = $values->{'internal.co-owners'}; 
                                   } else {
                                     my @keepcoowners = &Apache::loncommon::get_env_multiple('form.coowners');                                      my @keepcoowners = &Apache::loncommon::get_env_multiple('form.coowners');
                                     my @pendingcoowners = &Apache::loncommon::get_env_multiple('form.pendingcoowners');                                      my @pendingcoowners = &Apache::loncommon::get_env_multiple('form.pendingcoowners');
                                     my @invitecoowners =  &Apache::loncommon::get_env_multiple('form.invitecoowners');                                      my @invitecoowners =  &Apache::loncommon::get_env_multiple('form.invitecoowners');
Line 989  sub process_changes { Line 997  sub process_changes {
                                     if ($pendingcoowners ne '') {                                      if ($pendingcoowners ne '') {
                                         @newpending = @pendingcoown;                                          @newpending = @pendingcoown;
                                     }                                      }
                                   } else {
                                       @newcoown = @currcoown;
                                 }                                  }
                                 $newvalues{'pendingco-owners'} = join(',',sort(@newpending));                                  $newvalues{'pendingco-owners'} = join(',',sort(@newpending));
                                 $newvalues{'co-owners'} = join(',',sort(@newcoown));                                  $newvalues{'co-owners'} = join(',',sort(@newcoown));
Line 1254  sub process_changes { Line 1264  sub process_changes {
                                 $settings =~ s/,$//;                                  $settings =~ s/,$//;
                             }                              }
                             $newvalues{$entry} = $settings;                              $newvalues{$entry} = $settings;
                           } elsif ($entry eq 'grading') {
                               if ($env{'form.'.$entry} eq 'standard') {
                                   if ($env{'form.hidetotals'}) {
                                       my %sections = &Apache::loncommon::get_sections($cdom,$cnum);
                                       if (keys(%sections)) {
                                           my @secs = &Apache::loncommon::get_env_multiple('form.hidetotals_sections');
                                           if (grep(/^all$/,@secs)) {
                                               $newvalues{'hidetotals'} = 'all';
                                           } elsif (@secs) {
                                               $newvalues{'hidetotals'} = '';
                                               foreach my $sec (sort {$a <=> $b} @secs) {
                                                   if (exists($sections{$sec})) {
                                                       $newvalues{'hidetotals'} .= $sec.','
                                                   }
                                               }
                                               $newvalues{'hidetotals'} =~ s/,$//;
                                           }
                                       } else {
                                           $newvalues{'hidetotals'} = 'all';
                                       }
                                   }
                               }
                               if ($newvalues{'hidetotals'} ne $values->{'hidetotals'}) {
                                   $changes->{'hidetotals'} = $newvalues{'hidetotals'};
                                   $changes->{'grading'} = $env{'form.'.$entry};
                               }
                               $newvalues{$entry} = $env{'form.'.$entry};
                         } else {                          } else {
                             $newvalues{$entry} = $env{'form.'.$entry};                              $newvalues{$entry} = $env{'form.'.$entry};
                         }                          }
Line 1387  sub store_changes { Line 1424  sub store_changes {
                                     unless (($key eq 'co-owners') || ($key eq 'discussion_post_fonts')) {                                      unless (($key eq 'co-owners') || ($key eq 'discussion_post_fonts')) {
                                         $displayval = $changes->{$item}{$key};                                          $displayval = $changes->{$item}{$key};
                                     }                                      }
                                       if (($item eq 'grading') && ($key eq 'grading')) {
                                           if ($displayval eq 'standard') {
                                               my $hidetotals;
                                               if (exists($changes->{$item}{'hidetotals'})) {
                                                   if ($changes->{$item}{'hidetotals'} eq '') {
                                                       if (exists($values->{'hidetotals'})) {
                                                           push(@delkeys,'hidetotals');
                                                       }
                                                   } else {
                                                       $hidetotals = $changes->{$item}{'hidetotals'};
                                                   }
                                               } elsif (exists($values->{'hidetotals'})) {
                                                   $hidetotals = $values->{'hidetotals'};
                                               }
                                               if ($hidetotals eq '') {
                                                   $displayval = &mt('standard with "hide course totals" set to "No"');
                                                   if (exists($values->{'hidetotals'})) {
                                                       push(@delkeys,'hidetotals');
                                                   }
                                               } elsif ($hidetotals =~ /^([\w,]+)$/) {
                                                   my $secstr = $1;
                                                   my @secs = split(/,/,$secstr);
                                                   if (grep(/^all$/,@secs)) {
                                                       $displayval = &mt('standard with "hide course totals" set to "Yes" for all users');
                                                       $hidetotals = 'all';
                                                   } else {
                                                       $displayval = &mt('standard with "hide course totals" set to "Yes" for users in section(s): [_1]',join(', ',@secs));
                                                   }
                                                   $storehash{'hidetotals'} = $hidetotals;
                                               }
                                           } elsif (exists($values->{'hidetotals'})) {
                                               push(@delkeys,'hidetotals');
                                           }
                                       }
                                     if ($item eq 'feedback') {                                      if ($item eq 'feedback') {
                                         if ($key =~ /^(question|policy|comment)(\.email)\.text$/) {                                          if ($key =~ /^(question|policy|comment)(\.email)\.text$/) {
                                             $text = $prefs->{$item}->{'itemtext'}{$1.$2};                                              $text = $prefs->{$item}->{'itemtext'}{$1.$2};
Line 1754  sub get_course { Line 1825  sub get_course {
 }  }
   
 sub get_jscript {  sub get_jscript {
     my ($cid,$cdom,$phase,$crstype,$settings) = @_;      my ($cid,$cdom,$phase,$crstype,$settings,$noedit) = @_;
     my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom,$crstype);      my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom,$crstype);
     my ($jscript,$categorize_js,$loncaparev_js,$instcode_js);      my ($jscript,$categorize_js,$loncaparev_js,$instcode_js);
     my $stubrowse_js = &Apache::loncommon::studentbrowser_javascript();      my $stubrowse_js = &Apache::loncommon::studentbrowser_javascript();
Line 1880  function syllabusinfo() { Line 1951  function syllabusinfo() {
     }      }
 }  }
 ENDSCRIPT  ENDSCRIPT
       my $grading_js;
       unless ($noedit) {
           $grading_js = <<"ENDSCRIPT";
   function toggleGrading(form) {
       if (document.getElementById('hidetotalsdiv')) {
           var totalsdivid = document.getElementById('hidetotalsdiv');
           var selname = form.elements['grading'];
           if (selname) {
               var current = selname.options[selname.selectedIndex].value
               if (current == 'standard') {
                   totalsdivid.style.display = 'inline-block';
               } else {
                   totalsdivid.style.display = 'none';
               }
           }
       }
       return;
   }
   
   function toggleHiddenTotalsSec(form) {
       if (document.getElementById('sectotalsdiv')) {
           var sectotalsdivid = document.getElementById('sectotalsdiv');
           var radioname = form.elements['hidetotals'];
           if (radioname) {
               if (radioname.length > 0) {
                   var setvis;
                   for (var i=0; i<radioname.length; i++) {
                       if (radioname[i].checked == true) {
                           if (radioname[i].value == 1) {
                               sectotalsdivid.style.display = 'inline-block';
                               setvis = 1;
                           }
                           break;
                       }
                   }
                   if (!setvis) {
                       sectotalsdivid.style.display = 'none';
                   }
               }
           }
       }
       return;
   }
   ENDSCRIPT
       }
     $jscript = '<script type="text/javascript" language="Javascript">'."\n".      $jscript = '<script type="text/javascript" language="Javascript">'."\n".
                '// <![CDATA['."\n".                 '// <![CDATA['."\n".
                $browse_js."\n".$categorize_js."\n".$loncaparev_js."\n".                 $browse_js."\n".$categorize_js."\n".$loncaparev_js."\n".
                $cloners_js."\n".$instcode_js.                 $cloners_js."\n".$instcode_js.
                $syllabus_js."\n".'//]]>'."\n".                 $syllabus_js."\n".$grading_js."\n".'//]]>'."\n".
                '</script>'."\n".$stubrowse_js."\n";                 '</script>'."\n".$stubrowse_js."\n";
     return $jscript;      return $jscript;
 }  }
Line 3173  sub coowner_invitations { Line 3289  sub coowner_invitations {
         @pendingcoown = split(',',$pendingcoowners);          @pendingcoown = split(',',$pendingcoowners);
     }      }
     if (ref($currcoownref) eq 'ARRAY') {      if (ref($currcoownref) eq 'ARRAY') {
         @currcoown == @{$currcoownref};          @currcoown = @{$currcoownref};
     }      }
     my $disabled;      my $disabled;
     if ($noedit) {      if ($noedit) {
Line 3237  sub manage_coownership  { Line 3353  sub manage_coownership  {
         @pendingcoown = split(',',$pendingcoowners);          @pendingcoown = split(',',$pendingcoowners);
     }      }
     if (ref($currcoownref) eq 'ARRAY') {      if (ref($currcoownref) eq 'ARRAY') {
         @currcoown == @{$currcoownref};          @currcoown = @{$currcoownref};
     }      }
     my $disabled;      my $disabled;
     if ($noedit) {      if ($noedit) {
Line 3550  sub select_recipient { Line 3666  sub select_recipient {
 }  }
   
 sub select_sections {  sub select_sections {
     my ($item,$num,$sections,$selected,$noedit) = @_;      my ($item,$num,$sections,$selected,$noedit,$allval) = @_;
     my ($output,@currsecs,$allsec,$disabled);      my ($output,@currsecs,$allsec,$disabled);
     if (ref($selected) eq 'ARRAY') {      if (ref($selected) eq 'ARRAY') {
         @currsecs = @{$selected};          @currsecs = @{$selected};
Line 3566  sub select_sections { Line 3682  sub select_sections {
             my $mult;              my $mult;
             if (@{$sections} > 1) {              if (@{$sections} > 1) {
                 $mult = ' multiple="multiple"';                  $mult = ' multiple="multiple"';
                   my $size;
                 if (@{$sections} > 3) {                  if (@{$sections} > 3) {
                     $mult .= ' size="4"';                      $size = 4;
                   } else {
                       $size = 1 + scalar(@{$sections});
                 }                  }
                   $mult .= ' size="'.$size.'"';
               }
               my $name = $item.'_sections';
               unless ($item eq 'hidetotals') {
                   $name .= '_'.$num;
             }              }
             $output = '<select name="'.$item.'_sections_'.$num.'"'.$mult.$disabled.'>'.              $output = '<select name="'.$name.'"'.$mult.$disabled.'>'.
                       ' <option value=""'.$allsec.'>'.&mt('All').'</option>';                        ' <option value="'.$allval.'"'.$allsec.'>'.&mt('All').'</option>';
             foreach my $sec (@{$sections}) {              foreach my $sec (@{$sections}) {
                 my $is_sel;                  my $is_sel;
                 if ((@currsecs) && (grep(/^\Q$sec\E$/,@currsecs))) {                  if ((@currsecs) && (grep(/^\Q$sec\E$/,@currsecs))) {
                     $is_sel = 'selected="selected"';                      $is_sel = ' selected="selected"';
                 }                  }
                 $output .= '<option value="'.$sec.'"'.$is_sel.'>'.$sec.'</option>';                  $output .= '<option value="'.$sec.'"'.$is_sel.'>'.$sec.'</option>';
             }              }
Line 4027  sub print_appearance { Line 4151  sub print_appearance {
 }  }
   
 sub print_grading {  sub print_grading {
     my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype,$noedit) = @_;      my ($cdom,$cnum,$settings,$ordered,$itemtext,$rowtotal,$crstype,$noedit) = @_;
     unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) {      unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) {
         return;          return;
     }      }
Line 4046  sub print_grading { Line 4170  sub print_grading {
                  },                   },
         'rndseed' => {          'rndseed' => {
                    text => '<b>'.&mt($itemtext->{'rndseed'}).'</b>'.                     text => '<b>'.&mt($itemtext->{'rndseed'}).'</b>'.
                            '<span class="LC_warning">'.'<br />'.                             '<br /><span class="LC_warning LC_nobreak">'.
                            &mt('Modifying this will make problems have different numbers and answers!').                             &mt('Modifying this will make problems have different numbers and answers!').
                            '</span>',                             '</span>',
                    input => 'selectbox',                     input => 'selectbox',
Line 4078  sub print_grading { Line 4202  sub print_grading {
                    input => 'radio',                     input => 'radio',
                  },                   },
     );      );
     return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'grading',$noedit);      return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'grading',$noedit,$cnum);
 }  }
   
 sub print_printouts {  sub print_printouts {
Line 4283  sub item_table_row_end { Line 4407  sub item_table_row_end {
 }  }
   
 sub yesno_radio {  sub yesno_radio {
     my ($item,$settings,$unsetdefault,$valueyes,$valueno,$noedit) = @_;      my ($item,$settings,$unsetdefault,$valueyes,$valueno,$noedit,$onclick,$reverse) = @_;
     my $itemon = ' ';      my $itemon = ' ';
     my $itemoff = ' checked="checked" ';      my $itemoff = ' checked="checked" ';
     if (($valueyes eq '') && ($valueno eq '')) {      if (($valueyes eq '') && ($valueno eq '')) {
Line 4305  sub yesno_radio { Line 4429  sub yesno_radio {
     my $disabled;      my $disabled;
     if ($noedit) {      if ($noedit) {
         $disabled = ' disabled="disabled"';          $disabled = ' disabled="disabled"';
       } elsif ($onclick) {
           $onclick = ' onclick="'.$onclick.'"';
       }
       if ($reverse) {
           return '<span class="LC_nobreak"><label>'.
                  '<input type="radio" name="'.$item.'"'.
                  $itemoff.' value="'.$valueno.'"'.$disabled.$onclick.' />'.&mt('No').'</label>&nbsp;'.
                  '<label><input type="radio" name="'.$item.'"'.
                  $itemon.' value="'.$valueyes.'"'.$disabled.$onclick.' />'.&mt('Yes').'</label></span>';
       } else {
           return '<span class="LC_nobreak"><label>'.
                  '<input type="radio" name="'.$item.'"'.
                  $itemon.' value="'.$valueyes.'"'.$disabled.$onclick.' />'.&mt('Yes').'</label>&nbsp;'.
                  '<label><input type="radio" name="'.$item.'"'.
                  $itemoff.' value="'.$valueno.'"'.$disabled.$onclick.' />'.&mt('No').'</label></span>';
     }      }
     return '<span class="LC_nobreak"><label>'.  
            '<input type="radio" name="'.$item.'"'.  
            $itemon.' value="'.$valueyes.'"'.$disabled.' />'.&mt('Yes').'</label>&nbsp;'.  
            '<label><input type="radio" name="'.$item.'"'.  
            $itemoff.' value="'.$valueno.'"'.$disabled.' />'.&mt('No').'</label></span>';  
 }  }
   
 sub select_from_options {  sub select_from_options {
     my ($item,$order,$options,$curr,$nullval,$multiple,$maxsize,$onchange,$noedit) = @_;      my ($item,$order,$options,$curr,$nullval,$multiple,$maxsize,$onchange,$noedit,$id) = @_;
     my $output;      my $output;
     my $disabled;      my $disabled;
     if ($noedit) {      if ($noedit) {
Line 4330  sub select_from_options { Line 4464  sub select_from_options {
                 $output .= ' size="'.$maxsize.'"';                  $output .= ' size="'.$maxsize.'"';
             }              }
         }          }
           if ($id ne '') {
               $output .= ' id="'.$id.'"';
           }
         $output .= $disabled.'>'."\n";          $output .= $disabled.'>'."\n";
         if ($nullval ne '') {          if ($nullval ne '') {
             $output .= '<option value=""';              $output .= '<option value=""';
Line 4363  sub select_from_options { Line 4500  sub select_from_options {
 }  }
   
 sub make_item_rows {  sub make_item_rows {
     my ($cdom,$items,$ordered,$settings,$rowtotal,$crstype,$caller,$noedit) = @_;      my ($cdom,$items,$ordered,$settings,$rowtotal,$crstype,$caller,$noedit,$cnum) = @_;
     my $datatable;      my $datatable;
     if ((ref($items) eq 'HASH') && (ref($ordered) eq 'ARRAY')) {      if ((ref($items) eq 'HASH') && (ref($ordered) eq 'ARRAY')) {
         my $count = 0;          my $count = 0;
Line 4414  sub make_item_rows { Line 4551  sub make_item_rows {
                 }                  }
                 $datatable .= &yesno_radio($item,$settings,$unsetdefault,$valueyes,$valueno,$noedit);                  $datatable .= &yesno_radio($item,$settings,$unsetdefault,$valueyes,$valueno,$noedit);
             } elsif ($items->{$item}{input} eq 'selectbox') {              } elsif ($items->{$item}{input} eq 'selectbox') {
                   my ($id,$onchange);
                   if ($caller eq 'grading') {
                       if ($item eq 'grading') {
                           $onchange = ' onchange="javascript:toggleGrading(this.form);"';
                           $id = $item;
                       }
                   }
                 my $curr = $settings->{$item};                  my $curr = $settings->{$item};
                 $datatable .=                  $datatable .=
                     &select_from_options($item,$items->{$item}{'order'},                      &select_from_options($item,$items->{$item}{'order'},
                                          $items->{$item}{'options'},$curr,                                           $items->{$item}{'options'},$curr,
                                          $items->{$item}{'nullval'},                                           $items->{$item}{'nullval'},
                                          undef,undef,undef,$noedit);                                           undef,undef,$onchange,$noedit,$id);
                   if ($item eq 'grading') {
                       my ($unsetdefault,$valueyes,$valueno,$sectionbox);
                       my $gradingsty = 'none';
                       my $gradingsecsty = 'none';
                       $unsetdefault = 0;
                       my (@selsec,@sections,%current);
                       if ($curr eq 'standard') {
                           $gradingsty = 'inline-block';
                           if (ref($settings) eq 'HASH') {
                               $current{'hidetotals'} = $settings->{'hidetotals'};
                               if ($settings->{'hidetotals'} =~ /^([\w,]+)$/) {
                                   my $secstr = $1;
                                   unless ($secstr eq 'all') {
                                       @selsec = split(/,/,$secstr);
                                   }
                                   $current{'hidetotals'} = 1;
                               }
                           }
                       }
                       $valueyes = "1";
                       $valueno = "0";
                       my %sections = &Apache::loncommon::get_sections($cdom,$cnum);
                       if (keys(%sections)) {
                           @sections = sort( { $a <=> $b } keys(%sections));
                       }
                       my $onclick = 'javascript:toggleHiddenTotalsSec(this.form);';
                       my $sectionbox = '<div id="sectotalsdiv" style="display:'.$gradingsecsty.'; float:right">';
                       my $reverse = 1;
                       if (@sections) {
                           $sectionbox .= '&nbsp;...&nbsp;'.&mt('hidden in sections').':&nbsp;'.
                                          '<div style="position: relative; top: 0%;">'.
                                          &select_sections('hidetotals','',\@sections,\@selsec,$noedit,'all').
                                          '</div>';
                       }
                       $sectionbox .= '</div>';
                       $datatable .= '<fieldset id="hidetotalsdiv" style="display:'.$gradingsty.';">'.
                                     '<legend style="font-weight: normal;">'.
                                     &mt('Hide Course Points Totals').'</legend>'.
                                     '<div style="position: relative; top: 0%; float:left">'.
                                     &yesno_radio('hidetotals',\%current,$unsetdefault,$valueyes,$valueno,$noedit,
                                                  $onclick,$reverse).'</div>'.
                                     $sectionbox.
                                     '</fieldset><div style="padding:0;clear:both;margin:0;border:0"></div>';
                   }
             } elsif ($items->{$item}{input} eq 'textbox') {              } elsif ($items->{$item}{input} eq 'textbox') {
                 my $disabled;                  my $disabled;
                 if ($noedit) {                  if ($noedit) {

Removed from v.1.49.2.28  
changed lines
  Added in v.1.49.2.31


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