Diff for /loncom/interface/courseprefs.pm between versions 1.86 and 1.87

version 1.86, 2018/01/03 04:20:54 version 1.87, 2018/05/08 01:48:18
Line 367  sub handler { Line 367  sub handler {
     my %values=&Apache::lonnet::dump('environment',$cdom,$cnum);      my %values=&Apache::lonnet::dump('environment',$cdom,$cnum);
     my @prefs_order = ('courseinfo','localization','feedback','discussion',      my @prefs_order = ('courseinfo','localization','feedback','discussion',
                        'classlists','appearance','grading','printouts',                         'classlists','appearance','grading','printouts',
                        'spreadsheet','bridgetasks','other');                         'spreadsheet','bridgetasks','lti','other');
   
     my %prefs = (      my %prefs = (
         'courseinfo' =>          'courseinfo' =>
Line 530  sub handler { Line 530  sub handler {
                         suppress_embed_prompt => 'Hide upload references prompt if uploading file to portfolio',                          suppress_embed_prompt => 'Hide upload references prompt if uploading file to portfolio',
                                 },                                  },
                   },                    },
           'lti' =>
                     {
                       text => 'LTI provider settings',
                       help => 'Course_Prefs_LTIProvider',
                       ordered => ['lti.override','lti.topmenu','lti.inlinemenu','lti.lcmenu'],
                       itemtext => {
                            'lti.override'   => 'Override domain defaults',
                            'lti.topmenu'    => 'Display LON-CAPA page header',
                            'lti.inlinemenu' => 'Display LON-CAPA inline menu',
                            'lti.lcmenu'     => 'Menu items',
                                   },
                     },
         'other' =>          'other' =>
                   { text => 'Other settings',                    { text => 'Other settings',
                     help => 'Course_Prefs_Other',                      help => 'Course_Prefs_Other',
Line 725  sub print_config_box { Line 737  sub print_config_box {
         $output .= &print_spreadsheet($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit);          $output .= &print_spreadsheet($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit);
     } elsif ($action eq 'bridgetasks') {      } elsif ($action eq 'bridgetasks') {
         $output .= &print_bridgetasks($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit);          $output .= &print_bridgetasks($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit);
       } elsif ($action eq 'lti') {
           $output .= &print_lti($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit);
     } elsif ($action eq 'other') {      } elsif ($action eq 'other') {
         $output .= &print_other($cdom,$settings,$allitems,\$rowtotal,$crstype,$noedit);          $output .= &print_other($cdom,$settings,$allitems,\$rowtotal,$crstype,$noedit);
     }      }
Line 1257  sub process_changes { Line 1271  sub process_changes {
                                 $settings =~ s/,$//;                                  $settings =~ s/,$//;
                             }                              }
                             $newvalues{$entry} = $settings;                              $newvalues{$entry} = $settings;
                           } elsif ($action eq 'lti') {
                               if ($entry eq 'lti.override') {
                                   $newvalues{$entry} = $env{'form.'.$entry};
                               } elsif (($entry eq 'lti.topmenu') || ($entry eq 'lti.inlinemenu')) {
                                   if ($env{'form.lti.override'}) {
                                       $newvalues{$entry} = $env{'form.'.$entry};
                                   } else {
                                       $newvalues{$entry} = '';
                                   }
                               } elsif ($entry eq 'lti.lcmenu') {
                                   if (($env{'form.lti.override'}) &&
                                       (($env{'form.lti.topmenu'}) || ($env{'form.lti.inlinemenu'}))) {
                                       my @lcmenu = &Apache::loncommon::get_env_multiple('form.lti.lcmenu');
                                       my @newlcmenu;
                                       if (@lcmenu) {
                                           my @menuitems = ('fullname','coursetitle','role','logout','grades');
                                           foreach my $item (@menuitems) {
                                               next if (($item eq 'grades') && (!$newvalues{'lti.inlinemenu'}));
                                               if (grep(/^\Q$item\E$/,@lcmenu)) {
                                                   push(@newlcmenu,$item);
                                               }
                                           }
                                       }
                                       if (@newlcmenu) {
                                           $newvalues{$entry} = join(',',@newlcmenu);
                                       } else {
                                           $newvalues{$entry} = 'none';
                                       }
                                   } else {
                                       $newvalues{$entry} = '';
                                   }
                               }
                         } else {                          } else {
                             $newvalues{$entry} = $env{'form.'.$entry};                              $newvalues{$entry} = $env{'form.'.$entry};
                         }                          }
Line 1467  sub store_changes { Line 1513  sub store_changes {
                                             }                                              }
                                         }                                          }
                                         $displayname = &mt($text);                                          $displayname = &mt($text);
                                       } elsif ($item eq 'lti') {
                                           if ($key eq 'lti.lcmenu') {
                                               if ($changes->{$item}{$key} eq 'none') {
                                                   $displayval = &mt('None of the configurable menu items displayed');
                                               } else {
                                                   my %ltititles = &ltimenu_titles();
                                                   $displayval = join(', ', map { $ltititles{$_}; } split(/,/,$changes->{$item}{$key}));
                                               }
                                           } else {
                                               if ($changes->{$item}{$key} eq '1') {
                                                   $displayval = &mt('Yes');
                                               } elsif ($changes->{$item}{$key} eq '') {
                                                   $displayval = &mt('No');
                                               }
                                           }
                                           $displayname = &mt($text);
                                     } else {                                      } else {
                                         $displayname = &mt($text);                                          $displayname = &mt($text);
                                     }                                      }
Line 1529  sub store_changes { Line 1591  sub store_changes {
                                         }                                          }
                                     } elsif ($changes->{$item}{$key} eq '') {                                      } elsif ($changes->{$item}{$key} eq '') {
                                         push(@delkeys,$key);                                          push(@delkeys,$key);
                                         $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]',                                          if ($item eq 'lti') {
                                                    '<i>'.$displayname.'</i>')).'</li>';                                              if (($key eq 'lti.override') || (($key ne 'lti.override') && ($env{'form.lti.override'} ne ''))) {
                                                   if (($key eq 'lti.lcmenu') &&
                                                       ((!$env{'form.lti.topmenu'}) && (!$env{'form.lti.inlinemenu'}))) {
                                                       $output .= '<li>'.&mt('LTI settings for menu items only saved if page header and/or inline menu is set to be displayed').'</li>';
                                                   } else {
                                                       $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]',
                                                                  '<i>'.$displayname.'</i>',
                                                                  "'<b>$displayval</b>'")).'</li>';
                                                   }
                                               } elsif (!exists($changes->{$item}{'lti.override'})) {
                                                   $output .= '<li>'.&mt('LTI settings only saved if Override is set to "Yes"').'</li>';
                                               }
                                           } else {
                                               $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]',
                                                          '<i>'.$displayname.'</i>')).'</li>';
                                           }
                                     } else {                                      } else {
                                         $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]',                                          $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]',
                                                    '<i>'.$displayname.'</i>',                                                     '<i>'.$displayname.'</i>',
Line 1569  sub store_changes { Line 1646  sub store_changes {
                                 }                                  }
                                 if (($key eq 'description') || ($key eq 'cloners') ||                                  if (($key eq 'description') || ($key eq 'cloners') ||
                                     ($key eq 'hidefromcat') || ($key eq 'categories') ||                                      ($key eq 'hidefromcat') || ($key eq 'categories') ||
                                     ($key eq 'co-owners')) {                                      ($key eq 'co-owners') || ($key eq 'lti.override') ||
                                       ($key eq 'lti.topmenu') || ($key eq 'lti.inlinemenu') ||
                                       ($key eq 'lti.lcmenu')) {
                                     push(@need_env_update,$key);                                      push(@need_env_update,$key);
                                 }                                  }
                             }                              }
Line 1653  sub update_env { Line 1732  sub update_env {
                     my @coowners = split(',',$storehash->{'internal.'.$key});                      my @coowners = split(',',$storehash->{'internal.'.$key});
                     $crsinfo{$env{'request.course.id'}}{'co-owners'} = \@coowners;                      $crsinfo{$env{'request.course.id'}}{'co-owners'} = \@coowners;
                     $count ++;                      $count ++;
                   } elsif ($key =~ /^lti\./) {
                       &Apache::lonnet::appenv({'course.'.$env{'request.course.id'}.'.'.$key => $storehash->{$key}});
                 }                  }
             }              }
             if ($count) {              if ($count) {
Line 4375  sub print_bridgetasks { Line 4456  sub print_bridgetasks {
     return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'bridgetasks',$noedit);      return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'bridgetasks',$noedit);
 }  }
   
   sub print_lti {
       my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype,$noedit) = @_;
       unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) {
           return;
       }
       my @menuitems = ('fullname','coursetitle','role','logout','grades');
       my %menutitles = &ltimenu_titles();
       my ($domdefs,$displaydefs);
       if ($env{'request.lti.login'}) {
           my %lti = &Apache::lonnet::get_domain_lti($cdom,'provider');
           my @domdefsmenu;
           if (ref($lti{$env{'request.lti.login'}}) eq 'HASH') {
               if ($lti{$env{'request.lti.login'}}{'topmenu'}) {
                   $domdefs = &mt('Header shown').', ';
               }
               if ($lti{$env{'request.lti.login'}}{'inlinemenu'}) {
                   $domdefs .= &mt('Inline menu shown');
               }
               $domdefs =~ s/,\s$//;
               if (!$domdefs) {
                   $domdefs = &mt('No header or inline menu shown');
               }
               $domdefs = ' ('.&mt('Domain default').': '.$domdefs.')';
               if (ref($lti{$env{'request.lti.login'}}{'lcmenu'}) eq 'ARRAY') {
                   @domdefsmenu = @{$lti{$env{'request.lti.login'}}{'lcmenu'}};
               }
           }
           $displaydefs = &mt('Domain defaults');
           if (@domdefsmenu) {
               my @diffs = &Apache::loncommon::compare_arrays(\@menuitems,\@domdefsmenu);
               if (@diffs) {
                   my $missing;
                   foreach my $item (@menuitems) {
                       unless (grep(/^\Q$item\E$/,@domdefsmenu)) {
                           $missing .= ' '.$menutitles{$item}.',';
                       }
                   }
                   $missing =~ s/,$//;
                   $displaydefs .= ': '.&mt('Not shown').' --'.$missing;
               } else {
                   $displaydefs .= ': '.&mt('All shown');
               }
           } else {
               $displaydefs .= ': '.&mt('Not shown').' -- '.join(', ', map { $menutitles{$_}; } @menuitems);
           }
       } else {
           $displaydefs = &mt('Domain defaults only available in LTI context');
       }
       my %items = (
           'lti.override' => {
               text => '<b>'.&mt($itemtext->{'lti.override'}).'</b>'.$domdefs,
               input => 'radio',
                      },
           'lti.topmenu' => {
               text => '<b>'.&mt($itemtext->{'lti.topmenu'}).'</b>',
               input => 'radio',
                      },
           'lti.inlinemenu' => {
               text => '<b>'.&mt($itemtext->{'lti.inlinemenu'}).'</b>',
               input => 'radio',
                         },
           'lti.lcmenu' => {
               text => '<b>'.&mt($itemtext->{'lti.lcmenu'}).'</b><br />'.$displaydefs,
               input => 'custom',
                     },
                   );
       return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'lti',$noedit);
   }
   
   sub lcmenu_checkboxes {
       my ($cdom,$caller,$settings,$crstype,$noedit) = @_;
       my @menuitems = ('fullname','coursetitle','role','logout','grades');
       my %menutitles = &ltimenu_titles();
       my (@current,@domdefs);
       if ($env{'request.lti.login'}) {
           my %lti = &Apache::lonnet::get_domain_lti($cdom,'provider');
           if (ref($lti{$env{'request.lti.login'}}) eq 'HASH') {
               if (ref($lti{$env{'request.lti.login'}}{'lcmenu'}) eq 'ARRAY') {
                   @domdefs = @{$lti{$env{'request.lti.login'}}{'lcmenu'}};
               }
           }
       }
       if (ref($settings) eq 'HASH') {
           if ($settings->{'lti.lcmenu'}) {
               unless ($settings->{'lti.lcmenu'} eq 'none') {
                   @current = split(',',$settings->{'lti.lcmenu'});
               }
           } else {
               @current = @domdefs;
           }
       } else {
           @current = @domdefs;
       }
       my $numinrow = 3;
       my $count = 0;
       my $disabled;
       if ($noedit) {
           $disabled = ' disabled="disabled"';
       }
       my $output = '<table>';
       foreach my $item (@menuitems) {
           my $checked = '';
           if (grep(/^\Q$item\E$/,@current)) {
               $checked = ' checked="checked" ';
           }
           my $rem = $count%($numinrow);
           if ($rem == 0) {
               if ($count > 0) {
                   $output .= '</tr>';
               }
               $output .= '<tr>';
           }
           $output .= '<td align="left"><span class="LC_nobreak"><label><input type="checkbox" '.
                      'name="lti.lcmenu" value="'.$item.'"'.$checked.$disabled.'/>&nbsp;'.
                      $menutitles{$item}.'</label></span></td>';
           $count ++;
       }
       my $rem = $count%($numinrow);
       my $colsleft = $numinrow - $rem;
       if ($colsleft > 1 ) {
           $output .= '<td colspan="'.$colsleft.'" class="LC_left_item">'.
                      '&nbsp;</td>';
       } elsif ($colsleft == 1) {
           $output .= '<td class="LC_left_item">&nbsp;</td>';
       }
       $output .= '</tr></table>';
   }
   
   sub ltimenu_titles {
       return &Apache::lonlocal::texthash(
                                           fullname    => 'Full name',
                                           coursetitle => 'Course title',
                                           role        => 'Role',
                                           logout      => 'Logout',
                                           grades      => 'Grades',
       );
   }
   
 sub print_other {  sub print_other {
     my ($cdom,$settings,$allitems,$rowtotal,$crstype,$noedit) = @_;      my ($cdom,$settings,$allitems,$rowtotal,$crstype,$noedit) = @_;
     unless ((ref($settings) eq 'HASH') && (ref($allitems) eq 'ARRAY')) {      unless ((ref($settings) eq 'HASH') && (ref($allitems) eq 'ARRAY')) {
Line 4557  sub make_item_rows { Line 4776  sub make_item_rows {
                 $datatable .= &checkforpriv_row($cdom,$item,$settings,$crstype,$noedit);                  $datatable .= &checkforpriv_row($cdom,$item,$settings,$crstype,$noedit);
             } elsif ($item eq 'print_header_format') {              } elsif ($item eq 'print_header_format') {
                 $datatable .= &print_hdrfmt_row($item,$settings,$noedit);                  $datatable .= &print_hdrfmt_row($item,$settings,$noedit);
               } elsif ($item eq 'lti.lcmenu') {
                   $datatable .= &lcmenu_checkboxes($cdom,$item,$settings,$crstype,$noedit);
             } elsif ($items->{$item}{input} eq 'dates') {              } elsif ($items->{$item}{input} eq 'dates') {
                my $disabled;                 my $disabled;
                if ($noedit) {                 if ($noedit) {
Line 4574  sub make_item_rows { Line 4795  sub make_item_rows {
                      }                       }
                      $valueyes = "1";                       $valueyes = "1";
                      $valueno = "0";                       $valueno = "0";
                   } elsif (($item eq 'lti.topmenu') || ($item eq 'lti.inlinemenu')) {
                       $valueyes = '1';
                 }                  }
                 $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') {

Removed from v.1.86  
changed lines
  Added in v.1.87


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