[LON-CAPA-cvs] cvs: loncom /interface domainprefs.pm londocs.pm lonmodifycourse.pm /lonnet/perl lonnet.pm

raeburn raeburn at source.lon-capa.org
Thu Aug 20 16:51:48 EDT 2026


raeburn		Thu Aug 20 20:51:48 2026 EDT

  Modified files:              
    /loncom/interface	domainprefs.pm lonmodifycourse.pm londocs.pm 
    /loncom/lonnet/perl	lonnet.pm 
  Log:
  - Domain configuration for Course/Community defaults includes additional 
    item: "Availability of Accessibility Checker in Content Utilities",
    which can be overridden for each course by a DC. 
  
  
-------------- next part --------------
Index: loncom/interface/domainprefs.pm
diff -u loncom/interface/domainprefs.pm:1.461 loncom/interface/domainprefs.pm:1.462
--- loncom/interface/domainprefs.pm:1.461	Sun Jun 28 18:02:24 2026
+++ loncom/interface/domainprefs.pm	Thu Aug 20 20:51:47 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to set domain-wide configuration settings
 #
-# $Id: domainprefs.pm,v 1.461 2026/06/28 18:02:24 raeburn Exp $
+# $Id: domainprefs.pm,v 1.462 2026/08/20 20:51:47 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -7143,6 +7143,7 @@
         exttool              => 'External Tools can be defined and configured in courses/communities (by type)',
         crsauthor            => 'Standard LON-CAPA problems can be created within a course/community (by type)',
         crseditors           => 'Available editors for web pages and/or problems created in a course/community',
+        axeuse               => 'Availability of Accessibility Checker in Content Utilities',
     );
     my %staticdefaults = (
                            anonsurvey_threshold => 10,
@@ -7323,10 +7324,20 @@
         my %crsauthor;
         my %crseditors;
         my @types = ('official','unofficial','community','textbook','placement');
+        my %checkedaxe = (
+            none => ' checked="checked"',
+        );
         if (ref($settings) eq 'HASH') {
             if ($settings->{'ltiauth'}) {
                 $ltiauth = 1;
             }
+            if ($settings->{'axeuse'} =~ /^dom|instdom|all$/) {
+                my $curraxe = $settings->{'axeuse'};
+                delete($checkedaxe{'none'});
+                %checkedaxe = (
+                                $curraxe => ' checked="checked"',
+                              );
+            }
             if (ref($settings->{'domexttool'}) eq 'HASH') {
                 foreach my $type (@types) {
                     if ($settings->{'domexttool'}->{$type}) {
@@ -7639,6 +7650,40 @@
                           $editornames{$editor}.'</label></span></div>'."\n";
         }
         $datatable .= '</div></div></fieldset></td></tr>'."\n";
+        $itemcount ++;
+        $css_class = $itemcount%2?' class="LC_odd_row"':'';
+        my %axetext = &Apache::lonlocal::texthash (
+                        none    => 'Not available in any courses/communities',
+                        dom     => "Available in domain's own courses/communities only",
+                        instdom => "Available in institution's own courses/communities only",
+                        all     => 'Available in courses/communities from any domain',
+        );
+        $datatable .=
+                '<tr'.$css_class.'><td><span class="LC_nobreak">'.
+                $choices{'axeuse'}.
+                '</span></td>'.
+                '<td class="LC_left_item">'.
+                '<fieldset class="LC_borderless" style="line-height: 185%;">'.
+                '<legend class="LC_visually_hidden">'.$choices{'axeuse'}.'</legend>'.
+                '<span class="LC_nobreak">';
+        my @possoptions = ('none');
+        my @alldoms = &Apache::lonnet::all_domains();
+        if (@alldoms > 1) {
+            push(@possoptions,'dom');
+            my (%by_ip,%by_location, at intdoms, at instdoms);
+            &build_location_hashes(\@intdoms,\%by_ip,\%by_location,\@instdoms);
+            if (@instdoms > 1) {
+                push(@possoptions,'instdom');
+            }
+        }
+        push(@possoptions,'all');
+        foreach my $option (@possoptions) {
+            $datatable .= '<label><input type="radio" name="axeuse"'.
+                          ' value="'.$option.'"'.$checkedaxe{$option}.' />'.
+                          $axetext{$option}.'</label>'.($option? '<br />' : '');
+        }
+        $datatable .= '</span></fieldset></td></tr>'."\n";
+        $itemcount ++;
     }
     $$rowtotal += $itemcount;
     return $datatable;
@@ -21864,6 +21909,7 @@
                            'usejsme'         => 'on',
                            'inline_chem'     => 'on',
                            'ltiauth'         => 'off',
+                           'axeuse'          => 'none',
                          );
     my @toggles = ('uselcmath','usejsme','inline_chem','ltiauth');
     my @numbers = ('anonsurvey_threshold','uploadquota_official','uploadquota_unofficial',
@@ -21889,11 +21935,6 @@
                         mimetex  => &mt('Convert to Images'),
                         tth      => &mt('TeX to HTML'),
                      );
-    my %pdftext = &Apache::lonlocal::texthash (
-                        2 => 'Yes, including checkboxes',
-                        1 => 'Yes, excluding checkboxes',
-                        0 => 'No',
-    );
 
     my @editors = ('edit','xml','daxe');
     my %editornames = &crseditor_titles();
@@ -22190,6 +22231,29 @@
         $defaultshash{'coursedefaults'}{'exttool'} = \%newexttool;
         $defaultshash{'coursedefaults'}{'crsauthor'} = \%newcrsauthor;
         $defaultshash{'coursedefaults'}{'crseditors'} = \@newcrseditors;
+
+        my @possoptions = ('none');
+        my @alldoms = &Apache::lonnet::all_domains();
+        if (@alldoms > 1) {
+            push(@possoptions,'dom');
+            my (%by_ip,%by_location, at intdoms, at instdoms);
+            &build_location_hashes(\@intdoms,\%by_ip,\%by_location,\@instdoms);
+            if (@instdoms > 1) {
+                push(@possoptions,'instdom');
+            }
+        }
+        push(@possoptions,'all');
+        if (grep(/^\Q$env{'form.axeuse'}\E$/, at possoptions)) {
+            my $curr = $domconfig{'coursedefaults'}{'axeuse'};
+            if ($curr eq '') {
+                unless ($curr eq $defaultchecked{'axeuse'}) {
+                    $changes{'axeuse'} = 1;
+                }
+            } elsif ($curr ne $env{'form.axeuse'}) {
+                $changes{'axeuse'} = 1;
+            }
+            $defaultshash{'coursedefaults'}{'axeuse'} = $env{'form.axeuse'};
+        }
     }
     my $putresult = &Apache::lonnet::put_dom('configuration',\%defaultshash,
                                              $dom);
@@ -22201,13 +22265,18 @@
                 ($changes{'canclone'}) || ($changes{'mysqltables'}) || ($changes{'texengine'}) ||
                 ($changes{'inline_chem'}) || ($changes{'ltiauth'}) || ($changes{'domexttool'}) ||
                 ($changes{'exttool'}) || ($changes{'coursequota'}) || ($changes{'crsauthor'}) ||
-                ($changes{'maxsizepdfform'})) {
+                ($changes{'maxsizepdfform'}) || ($changes{'axeuse'})) {
                 foreach my $item ('canuse_pdfforms','uselcmath','usejsme','inline_chem','texengine',
-                                  'ltiauth','maxsizepdfform') {
+                                  'maxsizepdfform') {
                     if ($changes{$item}) {
                         $domdefaults{$item}=$defaultshash{'coursedefaults'}{$item};
                     }
                 }
+                foreach my $item ('ltiauth','axeuse') {
+                    if ($changes{$item}) {
+                        $domdefaults{'crs'.$item}=$defaultshash{'coursedefaults'}{$item};
+                    }
+                }
                 if ($changes{'coursecredits'}) {
                     if (ref($defaultshash{'coursedefaults'}{'coursecredits'}) eq 'HASH') {
                         foreach my $type (keys(%{$defaultshash{'coursedefaults'}{'coursecredits'}})) {
@@ -22472,6 +22541,16 @@
                         }
                         $resulttext .= '<li>'.&mt('Available editors for course/community resources: [_1]',$shown).'</li>';
                     }
+                } elsif ($item eq 'axeuse') {
+                    if ($env{'form.'.$item} eq 'none') {
+                        $resulttext .= '<li>'.&mt('Accessibility Checking unavailable').'</li>';
+                    } elsif ($env{'form.'.$item} eq 'dom') {
+                        $resulttext .= '<li>'.&mt("Accessibility Checking available for domain's own courses").'</li>';
+                    } elsif ($env{'form.'.$item} eq 'instdom') {
+                        $resulttext .= '<li>'.&mt("Accessibility Checking available for institution's own courses").'</li>';
+                    } else {
+                        $resulttext .= '<li>'.&mt('Accessibility Checking available for courses from any domain').'</li>';
+                    }
                 }
             }
             $resulttext .= '</ul>';
Index: loncom/interface/lonmodifycourse.pm
diff -u loncom/interface/lonmodifycourse.pm:1.111 loncom/interface/lonmodifycourse.pm:1.112
--- loncom/interface/lonmodifycourse.pm:1.111	Mon May  4 21:14:36 2026
+++ loncom/interface/lonmodifycourse.pm	Thu Aug 20 20:51:47 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # handler for DC-only modifiable course settings
 #
-# $Id: lonmodifycourse.pm,v 1.111 2026/05/04 21:14:36 raeburn Exp $
+# $Id: lonmodifycourse.pm,v 1.112 2026/08/20 20:51:47 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -435,6 +435,7 @@
                       'setexttool'    => 'View/Modify External Tools permissions',
                       'setcrsauthor'  => 'View/Modify In-course Authoring permissions',
                       'setcrseditors' => 'View/Modify permitted course resource editors',
+                      'setaxeuse'     => 'View/Modify Accessibility Checking availability',
                     );
     } else {
         %linktext = (
@@ -446,6 +447,7 @@
                       'setexttool'    => 'View External Tools permissions',
                       'setcrsauthor'  => 'View In-course Authoring permissions',
                       'setcrseditors' => 'View permitted course resource editors',
+                      'setaxeuse'     => 'View Accessibility Checking availability',
                     );
     }
     if ($type eq 'Community') {
@@ -613,6 +615,15 @@
                 permission => $permission->{'setcrseditors'},
                 linktitle => '',
             },
+            {
+                linktext => $linktext{'setaxeuse'},
+                icon => 'accessibility.png',
+                alttext => '',
+                #help => '',
+                url => &phaseurl('setaxeuse'),
+                permission => $permission->{'setaxeuse'},
+                linktitle => '',
+            },
         ]
         },
         );
@@ -1345,7 +1356,7 @@
 sub print_default_overrides {
     my ($r,$cdom,$cnum,$cdesc,$type,$readonly,$item) = @_;
     my (%titles,$checkeddom,$checkedcrs,$divsty,$currcrsval,$crsdefault,%crschecked,
-        $helpfile,$title,$crselements, at currcrseditors);
+        $helpfile,$title,$crselements, at currcrseditors,$curraxeuse);
     %titles = &default_overrides_titles($type);
     my ($title,$domdefdisplay,$settings,$optiontext,$options) =
         &default_overrides_common($item,$cdom,$cnum,$type,\%titles);
@@ -1355,6 +1366,9 @@
     if ($item eq 'ltiauth') {
         $helpfile = 'Modify_Course_LTI_Authen';
         $crsdefault = 0;
+    } elsif ($item eq 'axeuse') {
+        $helpfile = 'Modify_Course_Accessibility';
+        $crsdefault = 1;
     } else {
         if ($item eq 'exttool') {
             $helpfile = 'Modify_Course_External_Tool';
@@ -1478,12 +1492,19 @@
                 'valu' => 'Value for this course',
                 'modi' => 'Save',
                 'back' => 'Pick another action',
+                'axe'  => 'Accessibility Checking link/icon in Content Utilities', 
+                'axey' => 'Accessibility checking enabled',
+                'axen' => 'Accessibility checking disabled', 
+                'noax' => 'Not available in courses',
+                'axon' => 'Available in courses',
     );
     if ($type eq 'Community') {
         $titles{'crs'} = &mt('Only external tools defined in community may be used');
         $titles{'both'} = &mt('External tools defined/configured in either domain or community may be used');
         $titles{'cour'} = &mt('Use community-specific setting');
         $titles{'valu'} = &mt('Value for this community');
+        $titles{'noax'} = &mt('Not available in any communities');
+        $titles{'axon'} = &mt('Available in communities'); 
     }
     return %titles;
 }
@@ -1523,12 +1544,20 @@
             $domdef = 1;
             @options = ('edit','xml','daxe');
             map { $optiontext{$_} = $titles->{$_}; } @options;
+        } elsif ($item eq 'axeuse') {
+            $title = $titles->{'axe'};
+            $domdef = 'none';
+            @options = ('1','0');
+            %optiontext = (
+                            1 => $titles->{'axey'},
+                            0 => $titles->{'axen'},
+                          );
         }
     }
     my %domconfig =
         &Apache::lonnet::get_dom('configuration',['coursedefaults'],$cdom);
     if (ref($domconfig{'coursedefaults'}) eq 'HASH') {
-        if (($item eq 'ltiauth') || ($item eq 'crseditors')) {
+        if (($item eq 'ltiauth') || ($item eq 'crseditors') || ($item eq 'axeuse')) {
             $domdef = $domconfig{'coursedefaults'}{$item};
         } else {
             my $lctype = &get_lctype($type,\%settings);
@@ -1580,6 +1609,12 @@
         } else {
             $domdefdisplay = join(', ', map { $titles->{$_}; } ('edit','xml'));
         }
+    } elsif ($item eq 'axeuse') {
+        if ($domdef =~ /^all|dom|instdom$/) {
+            $domdefdisplay = $titles->{'axon'};
+        } else {
+            $domdefdisplay = $titles->{'noax'};
+        }
     }
     return ($title,$domdefdisplay,\%settings,\%optiontext,\@options);
 }
@@ -2620,6 +2655,12 @@
                                          chg   => 'Permitted course resource editors changed',
                                          nochg => 'Permitted course resource editors unchanged',
                                        );
+    } elsif ($item eq 'axeuse') {
+        %resulttext =
+            &Apache::lonlocal::texthash(
+                                         chg   => 'Availability of accessibility checking changed',
+                                         nochg => 'Availability of accessibility checking unchanged',
+                                       );
     }
     &print_header($r,$type);
     $r->print('<h3>'.$title.'</h3>'."\n".
@@ -2869,7 +2910,8 @@
 ENDSCRIPT
 
     } elsif (($phase eq 'setltiauth') || ($phase eq 'setexttool') ||
-             ($phase eq 'setcrsauthor') || ($phase eq 'setcrseditors')) {
+             ($phase eq 'setcrsauthor') || ($phase eq 'setcrseditors') ||
+             ($phase eq 'setaxeuse')) {
         $js .= <<"ENDJS";
 function toggleOptions(form,phase) {
     var radioname;
@@ -2886,6 +2928,9 @@
     } else if (phase == 'setcrseditors') {
         radioname = 'crseditorsset';
         divid = 'crscrseditors';
+    } else if (phase == 'setaxeuse') {
+        radioname = 'axeuseset';
+        divid = 'crsaxeuse';
     }
     var num = form.elements[radioname].length;
     if (num) {
@@ -2921,7 +2966,7 @@
         $starthash = {
            add_entries => {'onload' => "hide_searching(); courseSet(document.filterpicker.official, 'load');"},
                      };
-    } elsif ($env{'form.phase'} =~ /^set(ltiauth|exttool|crsauthor|crseditors)$/) {
+    } elsif ($env{'form.phase'} =~ /^set(ltiauth|exttool|crsauthor|crseditors|axeuse)$/) {
         $starthash = {
            add_entries => {'onload' => "toggleOptions(document.$env{'form.phase'},'$env{'form.phase'}');"},
                      };
@@ -3034,8 +3079,8 @@
           'threshold','postsubmit','postsubtimeout','defaultcredits','uploadquota',
           'selfenrollmgrdc','selfenrollmgrcc','action','state','currsec_st',
           'sections','newsec','mysqltables','nopasswdchg','ltiauth','ltiauthset',
-          'exttoolset','exttool','crsauthorset','crsauthor','crseditorsset','crseditors'],
-          ['^selfenrollmgr_','^selfenroll_'])."\n".
+          'exttoolset','exttool','crsauthorset','crsauthor','crseditorsset','crseditors',
+          'axeuseset','axeuse'],['^selfenrollmgr_','^selfenroll_'])."\n".
           '<input type="hidden" name="prevphase" value="'.$env{'form.phase'}.'" />';
     return $hidden_elements;
 }
@@ -3076,6 +3121,8 @@
             processcrsauthor  => 'edit',
             setcrseditors     => 'edit',
             processcrseditors => 'edit',
+            setaxeuse         => 'edit',
+            processaxeuse     => 'edit',
         );
         if ($passwdconf{'crsownerchg'}) {
             $permission{passwdchg} = 'edit';
@@ -3095,6 +3142,7 @@
             setexttool    => 'view',
             setcrsauthor  => 'view',
             setcrseditors => 'view',
+            setaxeuse     => 'view',
         );
         if ($passwdconf{'crsownerchg'}) {
             $permission{passwdchg} = 'view';
@@ -3346,6 +3394,18 @@
                              {href=>"javascript:changePage(document.$phase,'$phase')",
                               text=>"Result"});
                             &modify_default_overrides($r,$cdom,$cnum,$cdesc,$domdesc,$type,'crseditors');
+                        } elsif (($phase eq 'setaxeuse') && ($permission->{'setaxeuse'})) {
+                            &Apache::lonhtmlcommon::add_breadcrumb
+                            ({href=>"javascript:changePage(document.$phase,'$phase')",
+                              text=>"Availability of Accessibility Checking"});
+                            &print_default_overrides($r,$cdom,$cnum,$cdesc,$type,$readonly,'axeuse');
+                        } elsif (($phase eq 'processaxeuse') && ($permission->{'processaxeuse'})) {
+                            &Apache::lonhtmlcommon::add_breadcrumb
+                            ({href=>"javascript:changePage(document.$phase,'setaxeuse')",
+                              text=>"Availability of Accessibility Checking"},
+                             {href=>"javascript:changePage(document.$phase,'$phase')",
+                              text=>"Result"});
+                            &modify_default_overrides($r,$cdom,$cnum,$cdesc,$domdesc,$type,'axeuse');
                         }
                     }
                 } else {
Index: loncom/interface/londocs.pm
diff -u loncom/interface/londocs.pm:1.744 loncom/interface/londocs.pm:1.745
--- loncom/interface/londocs.pm:1.744	Tue Aug 18 18:53:27 2026
+++ loncom/interface/londocs.pm	Thu Aug 20 20:51:47 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Documents
 #
-# $Id: londocs.pm,v 1.744 2026/08/18 18:53:27 raeburn Exp $
+# $Id: londocs.pm,v 1.745 2026/08/20 20:51:47 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -6291,6 +6291,51 @@
     $r->print(&endContentScreen());
 }
 
+sub axeuse_allowed {
+    my ($r,$coursedom) = @_;
+    my ($axeuse,$noaxemsg);
+    my $crsaxeuse = $env{'course.'.$env{'request.course.id'}.'.internal.axeuse'};
+    my $lctype = lc(&Apache::loncommon::course_type());
+    if ($crsaxeuse eq '0') {
+        $noaxemsg = &mt("Accessibility Checking disabled in this $lctype");
+        return ($crsaxeuse,$noaxemsg);
+    }
+    my %domdefs=&Apache::lonnet::get_domain_defaults($coursedom);
+    if (($crsaxeuse eq '1') || ($domdefs{'crsaxeuse'} =~ /^dom|instdom|all$/)) {
+        my $defdom = $r->dir_config('lonDefDomain');
+        if ($defdom eq $coursedom) {
+            $axeuse = 1;
+        } else {
+            my @machinedoms = &Apache::lonnet::current_machine_domains();
+            if (grep(/^\Q$coursedom\E$/, at machinedoms)) {
+                $axeuse = 1;
+            } else {
+                my %defdomdefaults = &Apache::lonnet::get_domain_defaults($defdom);
+                if ($defdomdefaults{'crsaxeuse'} eq 'all') {
+                    $axeuse = 1;
+                } elsif ($defdomdefaults{'crsaxeuse'} eq 'instdom') {
+                    my $primary_id = &Apache::lonnet::domain($coursedom,'primary');
+                    my $intdom = &Apache::lonnet::internet_dom($primary_id);
+                    if ($intdom ne '') {
+                        my $internet_names = &Apache::lonnet::get_internet_names($Apache::lonnet::perlvar{'lonHostID'});
+                        if (ref($internet_names) eq 'ARRAY') {
+                            if (grep(/^\Q$intdom\E$/,@{$internet_names})) {
+                                $axeuse = 1;
+                            }
+                        }
+                    }
+                    unless ($axeuse) {
+                        $noaxemsg = &mt("This server's default domain configuration does not allow Accessibility Checking for the domain to which this $lctype belongs."); 
+                    }
+                }
+            }
+        }
+    } else {
+        $noaxemsg = &mt("Accessibility Checking not enabled in the domain to which this $lctype belongs.");
+    }
+    return ($axeuse,$noaxemsg);
+}
+
 sub wcag_check_form {
     my ($r,$canedit,$cnum,$cdom) = @_;
     my $crstype = &Apache::loncommon::course_type();
@@ -7026,14 +7071,25 @@
       &init_breadcrumbs('exportcourse','IMS Export');
       &Apache::imsexport::exportcourse($r);
   } elsif ($allowed && $env{'form.wcagcheck'}) {
-      if ($r->dir_config('lonAxeUse') eq 'Y') {
-          &init_breadcrumbs('wcagcheck','Select Resources for Accessibility Check','Docs_Accessibility_Check');
-          my @checkmain = &Apache::loncommon::get_env_multiple('form.wcagmain');
-          my @checksupp = &Apache::loncommon::get_env_multiple('form.wcagsupp');
-          if ((scalar(@checkmain) > 0) || (scalar(@checksupp) > 0)) {
-              &wcag_check_results($r,$canedit,$coursenum,$coursedom,\@checkmain,\@checksupp);
+      if ($r->dir_config('lonAxeUse')) {
+          my ($axeuse,$noaxemsg) = &axeuse_allowed($r,$coursedom);
+          if ($axeuse) {
+              &init_breadcrumbs('wcagcheck','Select Resources for Accessibility Check','Docs_Accessibility_Check');
+              my @checkmain = &Apache::loncommon::get_env_multiple('form.wcagmain');
+              my @checksupp = &Apache::loncommon::get_env_multiple('form.wcagsupp');
+              if ((scalar(@checkmain) > 0) || (scalar(@checksupp) > 0)) {
+                  &wcag_check_results($r,$canedit,$coursenum,$coursedom,\@checkmain,\@checksupp);
+              } else {
+                  &wcag_check_form($r,$canedit,$coursenum,$coursedom);
+              }
           } else {
-              &wcag_check_form($r,$canedit,$coursenum,$coursedom);
+              &init_breadcrumbs('wcagcheck','Accessibility Checking');
+              $r->print(&Apache::loncommon::start_page('Accessibility Checking'));
+              $r->print(&Apache::lonhtmlcommon::breadcrumbs('Accessibility'));
+              $r->print(&startContentScreen('tools'));
+              $r->print('<h2 class="LC_heading_2">'.&mt('Accessibility Checking Unavailable').'</h2>'."\n".
+                        '<p>'.$noaxemsg.'</p>');
+              $r->print(&endContentScreen());
           }
       } else {
           &init_breadcrumbs('wcagcheck','Accessibility Checking');
@@ -8776,16 +8832,21 @@
                     alttext    => '',
                     linktitle  => "Set shortened URLs for a resource or folder in your $lc_crstype for use in deep-linking"
                 },
-                {   linktext   => $lt{'cfa'},
-                    url        => "javascript:injectData(document.courseverify,'dummy','wcagcheck','$lt{'cfa'}')",
-                    permission => 'F',
-                    help       => 'Docs_Accessibility_Check',
-                    icon       => 'accessibility.png',
-                    alttext    => '',
-                    linktitle  => "Accessibility checking for selected resources in your $lc_crstype"
-                },
                 ]
         });
+    my $crsaxeuse = $env{'course.'.$env{'request.course.id'}.'internal.axeuse'};
+    my %domdefs=&Apache::lonnet::get_domain_defaults($coursedom);
+    if (($crsaxeuse eq '1') || (($crsaxeuse eq '') && ($domdefs{'crsaxeuse'} =~ /^dom|instdom|all$/))) { 
+        push(@{$menu[0]->{items}},
+             {   linktext   => $lt{'cfa'},
+                 url        => "javascript:injectData(document.courseverify,'dummy','wcagcheck','$lt{'cfa'}')",
+                 permission => 'F',
+                 help       => 'Docs_Accessibility_Check',
+                 icon       => 'accessibility.png',
+                 alttext    => '',
+                 linktitle  => "Accessibility checking for selected resources in your $lc_crstype"
+             });
+    }
     if ($canedit) {
         my ($crsauname,$crsaudom,$crshome);
         if (($coursenum ne '') && ($coursedom ne '')) {
Index: loncom/lonnet/perl/lonnet.pm
diff -u loncom/lonnet/perl/lonnet.pm:1.1548 loncom/lonnet/perl/lonnet.pm:1.1549
--- loncom/lonnet/perl/lonnet.pm:1.1548	Fri Aug  7 19:33:34 2026
+++ loncom/lonnet/perl/lonnet.pm	Thu Aug 20 20:51:47 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # TCP networking package
 #
-# $Id: lonnet.pm,v 1.1548 2026/08/07 19:33:34 raeburn Exp $
+# $Id: lonnet.pm,v 1.1549 2026/08/20 20:51:47 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2965,6 +2965,9 @@
         if (exists($domconfig{'coursedefaults'}{'ltiauth'})) {
             $domdefaults{'crsltiauth'} = $domconfig{'coursedefaults'}{'ltiauth'};
         }
+        if (exists($domconfig{'coursedefaults'}{'axeuse'})) {
+            $domdefaults{'crsaxeuse'} = $domconfig{'coursedefaults'}{'axeuse'};
+        }
     }
     if (ref($domconfig{'usersessions'}) eq 'HASH') {
         if (ref($domconfig{'usersessions'}{'remote'}) eq 'HASH') {


More information about the LON-CAPA-cvs mailing list