[LON-CAPA-cvs] cvs: doc /loncapafiles loncapafiles.lpml loncom/html/adm/help/tex Domain_Modify_Community.tex Domain_Modify_Course.tex loncom/interface lonmodifycourse.pm

raeburn raeburn at source.lon-capa.org
Thu Aug 3 11:57:25 EDT 2023


raeburn		Thu Aug  3 15:57:25 2023 EDT

  Added files:                 
    /loncom/html/adm/help/tex	Domain_Modify_Course.tex 
                             	Domain_Modify_Community.tex 

  Modified files:              
    /loncom/interface	lonmodifycourse.pm 
    /doc/loncapafiles	loncapafiles.lpml 
  Log:
  - "View or modify a course or community" item for Domain Coordinators.
    - "Actions" footer included on all pages after selecting a view/modification
      action for a specific course/community from "View/Modify Course Settings'
    - Course type included in header line above icons/links for actions.
    - Course title moved to <h4> header line on actions pages.
    - Explanation of actions moved to help file accessed via question mark on
      right side of breadcrumbs.
    - Satisfy w3c validation
  
  
-------------- next part --------------
Index: loncom/interface/lonmodifycourse.pm
diff -u loncom/interface/lonmodifycourse.pm:1.101 loncom/interface/lonmodifycourse.pm:1.102
--- loncom/interface/lonmodifycourse.pm:1.101	Sat Jul 29 20:33:25 2023
+++ loncom/interface/lonmodifycourse.pm	Thu Aug  3 15:57:23 2023
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # handler for DC-only modifiable course settings
 #
-# $Id: lonmodifycourse.pm,v 1.101 2023/07/29 20:33:25 raeburn Exp $
+# $Id: lonmodifycourse.pm,v 1.102 2023/08/03 15:57:23 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -411,7 +411,8 @@
 sub print_modification_menu {
     my ($r,$cdesc,$domdesc,$dom,$type,$cid,$coursehash,$permission) = @_;
     &print_header($r,$type);
-    my ($ccrole,$categorytitle,$setquota_text,$setuploadquota_text,$cdom,$cnum);
+    my ($ccrole,$categorytitle,$setquota_text,$setuploadquota_text,$cdom,$cnum,
+        $extendedtype);
     if (ref($coursehash) eq 'HASH') {
         $cdom = $coursehash->{'domain'};
         $cnum = $coursehash->{'num'};
@@ -446,11 +447,11 @@
     if ($type eq 'Community') {
         if ($permission->{'setparms'} eq 'edit') { 
             $categorytitle = 'View/Modify Community Settings';
-            $linktext{'setparms'} = 'View/Modify community owner';
+            $linktext{'setparms'} = 'View/Modify community owner, self-enrollment and table lifetime';
             $linktext{'catsettings'} = 'View/Modify catalog settings for community';
         } else {
             $categorytitle = 'View Community Settings';
-            $linktext{'setparms'} = 'View community owner';
+            $linktext{'setparms'} = 'View community owner, self-enrollment and table lifetime';
             $linktext{'catsettings'} = 'View catalog settings for community';
         }
         $setquota_text = &mt('Total disk space allocated for storage of portfolio files in all groups in a community.');
@@ -475,6 +476,9 @@
         }
         $setquota_text = &mt('Total disk space allocated for storage of portfolio files in all groups in a course.');
         $setuploadquota_text = &mt('Disk space allocated for storage of content uploaded directly to a course via Content Editor.');
+        my %settings = &Apache::lonnet::get('environment',['internal.coursecode','internal.textbook'],
+                                            $cdom,$cnum);
+        $extendedtype = ucfirst(&Apache::lonuserutils::get_extended_type($cdom,$cnum,$type,\%settings));
     }
     my $anon_text = &mt('Responder threshold required to display anonymous survey submissions.');
     my $postsubmit_text = &mt('Override defaults for submit button behavior post-submission for this specific course.'); 
@@ -582,64 +586,19 @@
         },
         );
 
-    my $menu_html =
+    $r->print(
         '<h3>'
-       .&mt('View/Modify settings for: [_1]',
-                '<span class="LC_nobreak">'.$cdesc.'</span>')
-       .'</h3>'."\n".'<p>';
-    if ($type eq 'Community') {
-        $menu_html .= &mt('Although almost all community settings can be modified by a Coordinator, the following may only be set or modified by a Domain Coordinator:');
-    } else {
-        $menu_html .= &mt('Although almost all course settings can be modified by a Course Coordinator, the following may only be set or modified by a Domain Coordinator:');
+       .&mt($type).': <span class="LC_nobreak">'.$cdesc.'</span>'
+       .'</h3>'."\n");
+    if ($extendedtype) {
+        $r->print('<h4>'.&mt('Type').': '.&mt("$extendedtype $type").'</h4>');
     }
-    $menu_html .= '</p>'."\n".'<ul>';
-    if ($type eq 'Community') {
-        $menu_html .= '<li>'.&mt('Community owner (permitted to assign Coordinator roles in the community).').'</li>'."\n".
-                      '<li>'.&mt('Override defaults for who configures self-enrollment for this specific community').'</li>'."\n";
-    } else {
-        $menu_html .=  '<li>'.&mt('Course owner (permitted to assign Course Coordinator roles in the course).').'</li>'."\n".
-                       '<li>'.&mt("Institutional code and default authentication (both required for auto-enrollment of students from institutional datafeeds).").'</li>'."\n";
-        if (($type ne 'Placement') && &showcredits($dom)) {
-            $menu_html .= '<li>'.&mt('Default credits earned by student on course completion.').'</li>'."\n";
-        }
-        $menu_html .= ' <li>'.&mt('Override defaults for who configures self-enrollment for this specific course.').'</li>'."\n";
-    }
-    $menu_html .= '<li>'.$mysqltables_text.'</li>'."\n".
-                  '<li>'.$setquota_text.'</li>'."\n".
-                  '<li>'.$setuploadquota_text.'</li>'."\n".
-                  '<li>'.$anon_text.'</li>'."\n".
-                  '<li>'.$postsubmit_text.'</li>'."\n".
-                  '<li>'.$ltiauth_text.'</li>'."\n".
-                  '<li>'.$exttool_text.'</li>'."\n";
-    my ($categories_link_start,$categories_link_end);
-    if ($permission->{'catsettings'} eq 'edit') {
-        $categories_link_start = '<a href="/adm/domainprefs?actions=coursecategories&phase=display">';
-        $categories_link_end = '</a>';
-    }
-    foreach my $item (@additional_params) {
-        if ($type eq 'Community') {
-            if ($item eq 'togglecats') {
-                $menu_html .= '  <li>'.&mt('Hiding/unhiding a community from the catalog (although can be [_1]configured[_2] to be modifiable by a Coordinator in community context).',$categories_link_start,$categories_link_end).'</li>'."\n";
-            } elsif ($item eq 'categorize') {
-                $menu_html .= '  <li>'.&mt('Manual cataloging of a community (although can be [_1]configured[_2] to be modifiable by a Coordinator in community context).',$categories_link_start,$categories_link_end).'</li>'."\n";
-            }
-        } else {
-            if ($item eq 'togglecats') {
-                $menu_html .= '  <li>'.&mt('Hiding/unhiding a course from the course catalog (although can be [_1]configured[_2] to be modifiable by a Course Coordinator in course context).',$categories_link_start,$categories_link_end).'</li>'."\n";
-            } elsif ($item eq 'categorize') {
-                $menu_html .= '  <li>'.&mt('Manual cataloging of a course (although can be [_1]configured[_2] to be modifiable by a Course Coordinator in course context).',$categories_link_start,$categories_link_end).'</li>'."\n";
-            }
-        }
-    }
-    $menu_html .=
-        ' </ul>'
-       .'<form name="menu" method="post" action="/adm/modifycourse">'
+    $r->print(
+        '<form name="menu" method="post" action="/adm/modifycourse">'
        ."\n"
-       .&hidden_form_elements();
-    
-    $r->print($menu_html);
-    $r->print(&Apache::lonhtmlcommon::generate_menu(@menu));
-    $r->print('</form>');
+       .&hidden_form_elements()
+       .&Apache::lonhtmlcommon::generate_menu(@menu)
+       .'</form>');
     return;
 }
 
@@ -757,30 +716,32 @@
         $setparms_link_start = '<a href="javascript:changePage(document.viewparms,'."'setparms'".');">';
         $setparms_link_end = '</a>';
     }
-    $r->print('<h3>'.&mt('Current automated enrollment settings for:').
-              ' <span class="LC_nobreak">'.$cdesc.'</span></h3>'.
+    $r->print('<h3>'.&mt('Current automated enrollment settings').'</h3>'."\n".
+              '<h4><span class="LC_nobreak">'.&mt($type).': '.$cdesc.'</span></h4>'."\n".
               '<form action="/adm/modifycourse" method="post" name="viewparms">'."\n".
-              '<p>'.$lt{'cose'}.'<ul>'.
+              '<p>'.$lt{'cose'}.'</p><ul>'.
               '<li>'.&mt('Settings modifiable by a [_1] via the [_2]Automated Enrollment Manager[_3] in a course.',
                          $cctitle,$enroll_link_start,$enroll_link_end).'</li>');
     if (&showcredits($cdom)) {
-        $r->print('<li>'.&mt('Settings modifiable by a [_1] via [_2]View/Modify course owner, institutional code, default authentication, credits, and self-enrollment[_3].',$dctitle,$setparms_link_start,$setparms_link_end)."\n");
+        $r->print('<li>'.&mt('Settings modifiable by a [_1] via [_2]View/Modify course owner, institutional code, default authentication, credits, self-enrollment and table lifetime[_3].',$dctitle,$setparms_link_start,$setparms_link_end)."\n");
     } else {
-        $r->print('<li>'.&mt('Settings modifiable by a [_1] via [_2]View/Modify course owner, institutional code, default authentication, and self-enrollment[_3].',$dctitle,$setparms_link_start,$setparms_link_end)."\n");
+        $r->print('<li>'.&mt('Settings modifiable by a [_1] via [_2]View/Modify course owner, institutional code, default authentication, self-enrollment and table lifetime[_3].',$dctitle,$setparms_link_start,$setparms_link_end)."\n");
     }
-    $r->print('</li></ul></p>'.
-              '<p>'.$lt{'cour'}.'</p><p>'.$disp_table.'</p><p>'.
-              '<a href="javascript:changePage(document.viewparms,'."'menu'".')">'.$lt{'back'}.'</a>'."\n".
-              &hidden_form_elements().
-              '</p></form>'
-    );
+    $r->print('</li></ul><p>'.
+              $lt{'cour'}.'</p>'.$disp_table.'<p>'."\n".
+              &hidden_form_elements().'</p>'.
+              '</form>'."\n");
+    my @actions =
+        ('<a href="javascript:changePage(document.viewparms,'."'menu'".')">'.
+         $lt{'back'}.'</a>');
+    $r->print('<br />'.&Apache::lonhtmlcommon::actionbox(\@actions));
 }
 
 sub print_setquota {
     my ($r,$cdom,$cnum,$cdesc,$type,$readonly) = @_;
     my $lctype = lc($type);
-    my $headline = &mt("Set disk space quotas for $lctype: [_1]",
-                     '<span class="LC_nobreak">'.$cdesc.'</span>');
+    my $headline = '<h3>'.&mt("Set disk space quotas for $lctype").'</h3>'."\n".
+                   '<h4><span class="LC_nobreak">'.&mt($type).': '.$cdesc.'</span></h4>'."\n";
     my %lt = &Apache::lonlocal::texthash(
                 'gpqu' => 'Disk space for storage of group portfolio files',
                 'upqu' => 'Disk space for storage of content directly uploaded to course via Content Editor',
@@ -822,8 +783,8 @@
         $submit = '<input type="submit" value="'.$lt{'modi'}.'" />';
     }
     $r->print(<<ENDDOCUMENT);
+$headline
 <form action="/adm/modifycourse" method="post" name="setquota" onsubmit="return verify_quota();">
-<h3>$headline</h3>
 <p><span class="LC_nobreak">
 $porthelpitem $lt{'gpqu'}: <input type="text" size="4" name="coursequota" value="$coursequota" $disabled /> MB
 </span>
@@ -836,9 +797,12 @@
 $submit
 </p>
 $hidden_elements
-<a href="javascript:changePage(document.setquota,'menu')">$lt{'back'}</a>
 </form>
 ENDDOCUMENT
+    my @actions =
+        ('<a href="javascript:changePage(document.setquota,'."'menu'".')">'.
+         $lt{'back'}.'</a>');
+    $r->print('<br />'.&Apache::lonhtmlcommon::actionbox(\@actions));
     return;
 }
 
@@ -873,17 +837,21 @@
         $submit = '<input type="submit" value="'.$lt{'modi'}.'" />';
     }
     my $helpitem = &Apache::loncommon::help_open_topic('Modify_Anonsurvey_Threshold');
+    my $showtype = &mt($type);
     $r->print(<<ENDDOCUMENT);
+<h3>$lt{'resp'}</h3>
+<h4><span class="LC_nobreak">$showtype: $cdesc</span></h4>
 <form action="/adm/modifycourse" method="post" name="setanon" onsubmit="return verify_anon_threshold();">
-<h3>$lt{'resp'} <span class="LC_nobreak">$cdesc</span></h3>
 <p>
-$helpitem $lt{'sufa'}: <input type="text" size="4" name="threshold" value="$threshold" $disabled />     
+$helpitem $lt{'sufa'}: <input type="text" size="4" name="threshold" value="$threshold" $disabled />     </p>
 $submit
-</p>
 $hidden_elements
-<a href="javascript:changePage(document.setanon,'menu')">$lt{'back'}</a>
 </form>
 ENDDOCUMENT
+    my @actions =
+        ('<a href="javascript:changePage(document.setanon,'."'menu'".')">'.
+         $lt{'back'}.'</a>');
+    $r->print('<br /><br />'.&Apache::lonhtmlcommon::actionbox(\@actions));
     return;
 }
 
@@ -936,25 +904,30 @@
         $submit = '<input type="submit" value="'.$lt{'modi'}.'" />';
     }
     my $helpitem = &Apache::loncommon::help_open_topic('Modify_Postsubmit_Config');
+    my $showtype = &mt($type);
     $r->print(<<ENDDOCUMENT);
+<h3>$lt{'conf'}</h3>
+<h4><span class="LC_nobreak">$showtype: $cdesc</span></h4>
 <form action="/adm/modifycourse" method="post" name="setpostsubmit" onsubmit="return verify_postsubmit();">
-<h3>$lt{'conf'} <span class="LC_nobreak">($cdesc)</span></h3>
 <p>
 $helpitem $lt{'disa'}: 
 <label><input type="radio" name="postsubmit" $checkedon onclick="togglePostsubmit('studentsubmission');" value="1" $disabled />
 $lt{'yes'}</label>  
 <label><input type="radio" name="postsubmit" $checkedoff onclick="togglePostsubmit('studentsubmission');" value="0" $disabled />
-$lt{'no'}</label>
+$lt{'no'}</label></p>
 <div id="studentsubmission" style="display: $display">
 $lt{'nums'} <input type="text" name="postsubtimeout" value="$postsubtimeout" $disabled /><br />
 $zero</div>
-<br />     
+<p>
 $submit
 </p>
 $hidden_elements
-<a href="javascript:changePage(document.setpostsubmit,'menu')">$lt{'back'}</a>
 </form>
 ENDDOCUMENT
+    my @actions =
+        ('<a href="javascript:changePage(document.setpostsubmit,'."'menu'".')">'.
+         $lt{'back'}.'</a>');
+    $r->print('<br />'.&Apache::lonhtmlcommon::actionbox(\@actions));
     return;
 }
 
@@ -1010,8 +983,9 @@
         $lt{'categ'} = &mt('Categorize Community');
         $lt{'assi'} = &mt('Assign one or more subcategories to this community.');
     }
-    $r->print('<form action="/adm/modifycourse" method="post" name="catsettings">'.
-              '<h3>'.$lt{'catset'}.' <span class="LC_nobreak">'.$cdesc.'</span></h3>');
+    $r->print('<h3>'.$lt{'catset'}.'</h3>'."\n".
+              '<h4><span class="LC_nobreak">'.&mt($type).': '.$cdesc.'</span></h4>'."\n".
+              '<form action="/adm/modifycourse" method="post" name="catsettings">'."\n");
     my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$cdom);
     my @cat_params = &catalog_settable($domconf{'coursecategories'},$type);
     if (@cat_params > 0) {
@@ -1029,40 +1003,55 @@
                 $excludeoff = ''; 
             }
             $r->print('<br /><h4>'.$lt{'visi'}.'</h4>'.
+                      '<p>'.
                       $lt{'exclude'}.
-                      ' <label><input name="hidefromcat" type="radio" value="yes" '.$excludeon.$disabled.' />'.&mt('Yes').'</label>   <label><input name="hidefromcat" type="radio" value="" '.$excludeoff.$disabled.' />'.&mt('No').'</label><br /><p>');
+                      ' <label><input name="hidefromcat" type="radio" value="yes" '.$excludeon.$disabled.' />'.&mt('Yes').'</label>   <label><input name="hidefromcat" type="radio" value="" '.$excludeoff.$disabled.' />'.&mt('No').'</label></p><p>');
             if ($type eq 'Community') {
-                $r->print(&mt("If a community has been categorized using at least one of the categories defined for communities in the domain, it will be listed in the domain's publicly accessible Course/Community Catalog, unless excluded."));
+                $r->print(&mt("If a community has been categorized using at least one of the categories defined for communities in the domain, it will be listed in the domain's publicly accessible Course/Community Catalog, unless excluded.").'</p>');
             } elsif ($type eq 'Placement') {
-                $r->print(&mt("If a placement test has been categorized using at least one of the categories defined for placement tests in the domain, it will be listed in the domain's publicly accessible Course/Community Catalog, unless excluded."));
+                $r->print(&mt("If a placement test has been categorized using at least one of the categories defined for placement tests in the domain, it will be listed in the domain's publicly accessible Course/Community Catalog, unless excluded.").'</p>');
             } else {
-                $r->print(&mt("Unless excluded, a course will be listed in the domain's publicly accessible Course/Community Catalog, if at least one of the following applies").':<ul>'.
+                $r->print(&mt("Unless excluded, a course will be listed in the domain's publicly accessible Course/Community Catalog, if at least one of the following applies").':</p><ul>'.
                           '<li>'.&mt('Auto-cataloging is enabled and the course is assigned an institutional code.').'</li>'.
                           '<li>'.&mt('The course has been categorized using at least one of the course categories defined for the domain.').'</li></ul>');
             }
-            $r->print('</ul></p>');
         }
+        my $savebutton;
+        unless ($readonly) {
+            $savebutton = '<p><br /><input type="button" name="chgcatsettings" value="'.
+                          &mt('Save').'" onclick="javascript:changePage(document.catsettings,'.
+                          "'processcat'".');" /></p>';
+        }
+        my $shownsave;
         if (grep(/^categorize$/, at cat_params)) {
-            $r->print('<br /><h4>'.$lt{'categ'}.'</h4>');
+            my $categheader = '<br /><h4>'.$lt{'categ'}.'</h4>';
             if (ref($domconf{'coursecategories'}) eq 'HASH') {
                 my $cathash = $domconf{'coursecategories'}{'cats'};
                 if (ref($cathash) eq 'HASH') {
-                    $r->print($lt{'assi'}.'<br /><br />'.
+                    $r->print($categheader.
+                              '<p>'.$lt{'assi'}.'</p>'.
                               &Apache::loncommon::assign_categories_table($cathash,
                                                      $currsettings{'categories'},$type,$disabled));
                 } else {
-                    $r->print(&mt('No categories defined for this domain'));
+                    $r->print($savebutton.$categheader.
+                              '<p>'.&mt('No categories defined for this domain.'));
+                    $shownsave = 1;
                 }
             } else {
-                $r->print(&mt('No categories defined for this domain'));
+                $r->print($savebutton.$categheader.
+                          '<p>'.&mt('No categories defined for this domain.'));
+                $shownsave = 1;
             }
-            unless (($type eq 'Community') || ($type eq 'Placement')) { 
-                $r->print('<p>'.&mt('If auto-cataloging based on institutional code is enabled in the domain, a course will continue to be listed in the catalog of official courses, in addition to receiving a listing under any manually assigned categor(ies).').'</p>');
+            if (($type eq 'Community') || ($type eq 'Placement')) {
+                $r->print('</p>');
+            } elsif ($shownsave) {
+                $r->print('<br />'.&mt('If auto-cataloging based on institutional code is enabled in the domain, a course will continue to be listed in the catalog of official courses.').'</p>');
+            } else {
+                $r->print('</p><p>'.&mt('If auto-cataloging based on institutional code is enabled in the domain, a course will continue to be listed in the catalog of official courses, in addition to receiving a listing under any manually assigned categor(ies).').'</p>');
             }
         }
-        unless ($readonly) {
-            $r->print('<p><input type="button" name="chgcatsettings" value="'.
-                      &mt('Save').'" onclick="javascript:changePage(document.catsettings,'."'processcat'".');" /></p>');
+        unless ($readonly || $shownsave) {
+            $r->print($savebutton);
         }
     } else {
         $r->print('<span class="LC_warning">');
@@ -1071,11 +1060,13 @@
         } else {
             $r->print(&mt('Catalog settings in this domain are set in course context via "Course Configuration".'));
         }
-        $r->print('</span><br /><br />'."\n".
-                  '<a href="javascript:changePage(document.catsettings,'."'menu'".');">'.
-                  $lt{'back'}.'</a>');
+        $r->print('</span>'."\n");
     }
     $r->print(&hidden_form_elements().'</form>'."\n");
+    my @actions =
+        ('<a href="javascript:changePage(document.catsettings,'."'menu'".')">'.
+         $lt{'back'}.'</a>');
+    $r->print('<br />'.&Apache::lonhtmlcommon::actionbox(\@actions));
     return;
 }
 
@@ -1170,10 +1161,14 @@
     }
     &print_header($r,$crstype,$javascript_validations);
     my $dctitle = &Apache::lonnet::plaintext('dc');
-    my $mainheader = &modifiable_only_title($crstype);
     my $hidden_elements = &hidden_form_elements();
-    $r->print('<form action="/adm/modifycourse" method="post" name="'.$env{'form.phase'}.'">'."\n".
-              '<h3>'.$mainheader.' <span class="LC_nobreak">'.$cdesc.'</span></h3><p>'.
+    my $showtype;
+    if (($type eq 'official') || ($type eq 'unofficial') || ($type eq 'textbook')) {
+        $showtype = ' ('.&mt($type).')';
+    }
+    $r->print('<h3>'.&modifiable_only_title($crstype).'</h3>'."\n".
+              '<h4><span class="LC_nobreak">'.&mt($crstype).': '.$cdesc.$showtype.'</span></h4><br />'."\n".
+              '<form action="/adm/modifycourse" method="post" name="'.$env{'form.phase'}.'">'."\n".
               &Apache::lonhtmlcommon::start_pick_box());
     if ($crstype eq 'Community') {
         $r->print(&Apache::lonhtmlcommon::row_title(
@@ -1211,7 +1206,7 @@
                          &Apache::loncommon::help_open_topic('Modify_Course_Chgpasswd').
                          ' '.&mt('Changing passwords (internal)'))."\n".
                          '<label><input type="checkbox" value="1" name="nopasswdchg"'.$checked.$disabled.' />'.
-                         &mt('Disable changing password for users with student role by course owner').'<label>'."\n".
+                         &mt('Disable changing password for users with student role by course owner').'</label>'."\n".
                          &Apache::lonhtmlcommon::row_closure());
         }
     }
@@ -1269,7 +1264,7 @@
               ' '.&mt('"Temporary" Tables Lifetime (s)'))."\n".
               '<input type="text" size="10" name="mysqltables" value="'.$settings{'internal.mysqltables'}.'"'.$disabled.' />'.
               &Apache::lonhtmlcommon::row_closure(1).
-              &Apache::lonhtmlcommon::end_pick_box().'</p><p>'.$hidden_elements);
+              &Apache::lonhtmlcommon::end_pick_box().'<br />'.$hidden_elements);
     unless ($readonly) {
         $r->print('<input type="button" onclick="javascript:changePage(this.form,'."'processparms'".');');
         if ($crstype eq 'Community') {
@@ -1279,7 +1274,11 @@
         }
         $r->print(' value="'.$lt{'gobt'}.'" />');
     }
-    $r->print('</p></form>');
+    $r->print('</form>');
+    my @actions =
+        ('<a href="javascript:changePage(document.'.$env{'form.phase'}.','."'menu'".')">'.
+         &mt('Pick another action').'</a>');
+    $r->print('<br /><br />'.&Apache::lonhtmlcommon::actionbox(\@actions));
     return;
 }
 
@@ -1290,11 +1289,15 @@
     my $cdom = $coursehash->{'domain'};
     my %currsettings = &get_selfenroll_settings($coursehash);
     &print_header($r,$type);
-    $r->print('<h3>'.&mt('Self-enrollment with a student role in: [_1]',
-              '<span class="LC_nobreak">'.$cdesc.'</span>').'</h3>'."\n");
+    $r->print('<h3>'.&mt('Self-enrollment with a student role').'</h3>'."\n".
+              '<h4><span class="LC_nobreak">'.&mt($type).': '.$cdesc.'</span></h4>'."\n");
     &Apache::loncreateuser::print_selfenroll_menu($r,'domain',$env{'form.pickedcourse'},
                                                   $cdom,$cnum,\%currsettings,
                                                   &hidden_form_elements(),$readonly);
+    my @actions =
+        ('<a href="javascript:changePage(document.selfenroll,'."'menu'".')">'.
+         &mt('Pick another action').'</a>');
+    $r->print('<br /><br />'.&Apache::lonhtmlcommon::actionbox(\@actions));
     return;
 }
 
@@ -1345,14 +1348,16 @@
         $submit = '<input type="button" onclick="javascript:changePage(this.form,'."'processltiauth'".');" value="'.$lt{'modi'}.'" />';
     }
     my $helpitem = &Apache::loncommon::help_open_topic('Modify_Course_LTI_Authen');
+    my $showtype = &mt($type);
     $r->print(<<ENDDOCUMENT);
+<h3>$helpitem $lt{'requ'}</h3>
+<h4><span class="LC_nobreak">$showtype: $cdesc</span></h4>
 <form action="/adm/modifycourse" method="post" name="setltiauth">
-<h3>$helpitem $lt{'requ'} <span class="LC_nobreak">$cdesc</span></h3>
-<p><span class="LC_nobreak">$lt{'curd'}: <span style="font-style:italic">$domdefdisplay</span></span</p>
+<p><span class="LC_nobreak">$lt{'curd'}: <span style="font-style:italic">$domdefdisplay</span></span></p>
 <p><span class="LC_nobreak">
 <label><input type="radio" name="ltiauthset" value="dom" onclick="toggleLTIOptions(this.form);"$checkeddom$disabled />$lt{'used'}</label></span><br />
 <span class="LC_nobreak">
-<label><input type="radio" name="ltiauthset" value="course" onclick="toggleLTIOptions(this.form);"$checkedcrs$disabled />$lt{'cour'}</label></span>
+<label><input type="radio" name="ltiauthset" value="course" onclick="toggleLTIOptions(this.form);"$checkedcrs$disabled />$lt{'cour'}</label></span></p>
 <fieldset id="crsltiauth" style="$divsty">
 <legend>$lt{'valu'}</legend>
 <span class="LC_nobreak">
@@ -1361,13 +1366,16 @@
 <span class="LC_nobreak">
 <label><input type="radio" name="ltiauth" value="1"$authok$disabled />$lt{'link'}</label>
 </span>
-</fieldset>
+</fieldset><p>
 $submit
-</p>
 $hidden_elements
-<a href="javascript:changePage(document.setltiauth,'menu')">$lt{'back'}</a>
+</p>
 </form>
 ENDDOCUMENT
+    my @actions =
+        ('<a href="javascript:changePage(document.setltiauth,'."'menu'".')">'.
+         $lt{'back'}.'</a>');
+    $r->print('<br />'.&Apache::lonhtmlcommon::actionbox(\@actions));
     return;
 }
 
@@ -1434,15 +1442,16 @@
         $submit = '<input type="button" onclick="javascript:changePage(this.form,'."'processexttool'".');" value="'.$titles{'modi'}.'" />';
     }
     my $helpitem = &Apache::loncommon::help_open_topic('Modify_Course_External_Tool');
+    my $showtype = &mt($type);
     $r->print(<<ENDDOCUMENT);
-<form action="/adm/modifycourse" method="post" name="setexttool">
 <h3>$helpitem $titles{'extt'}</h3>
-<h4><span class="LC_nobreak">$type: $cdesc</span></h4>
-<p><span class="LC_nobreak">$titles{'curd'}: <span style="font-style:italic">$domdefdisplay</span></span</p>
+<h4><span class="LC_nobreak">$showtype: $cdesc</span></h4>
+<form action="/adm/modifycourse" method="post" name="setexttool">
+<p><span class="LC_nobreak">$titles{'curd'}: <span style="font-style:italic">$domdefdisplay</span></span></p>
 <p><span class="LC_nobreak">
 <label><input type="radio" name="exttoolset" value="dom" onclick="toggleExtToolOptions(this.form);"$checkeddom$disabled />$titles{'used'}</label></span><br />
 <span class="LC_nobreak">
-<label><input type="radio" name="exttoolset" value="course" onclick="toggleExtToolOptions(this.form);"$checkedcrs$disabled />$titles{'cour'}</label></span>
+<label><input type="radio" name="exttoolset" value="course" onclick="toggleExtToolOptions(this.form);"$checkedcrs$disabled />$titles{'cour'}</label></span></p>
 <fieldset id="crsexttool" style="$divsty">
 <legend>$titles{'valu'}</legend>
 <span class="LC_nobreak">
@@ -1457,13 +1466,16 @@
 <span class="LC_nobreak">
 <label><input type="radio" name="exttool" value="none"$crschecked{'none'}$disabled />$titles{'none'}</label>
 </span>
-</fieldset><br />
+</fieldset><p>
 $submit
-</p>
 $hidden_elements
-<a href="javascript:changePage(document.setexttool,'menu')">$titles{'back'}</a>
+</p>
 </form>
 ENDDOCUMENT
+    my @actions =
+        ('<a href="javascript:changePage(document.setexttool,'."'menu'".')">'.
+         $titles{'back'}.'</a>');
+    $r->print('<br />'.&Apache::lonhtmlcommon::actionbox(\@actions));
     return;
 }
 
@@ -1498,13 +1510,17 @@
     my $cdom = $coursehash->{'domain'};
     my %currsettings = &get_selfenroll_settings($coursehash);
     &print_header($r,$type);
-    $r->print('<h3>'.&mt('Self-enrollment with a student role in: [_1]',
-             '<span class="LC_nobreak">'.$cdesc.'</span>').'</h3>'."\n");
-    $r->print('<form action="/adm/modifycourse" method="post" name="selfenroll">'."\n".
+    $r->print('<h3>'.&mt('Self-enrollment with a student role').'</h3>'.
+              '<h4><span class="LC_nobreak">'.&mt($type).': '.$cdesc.'</span></h4>'."\n".
+              '<form action="/adm/modifycourse" method="post" name="selfenrollchg">'."\n".
               &hidden_form_elements().'<br />');
     &Apache::loncreateuser::update_selfenroll_config($r,$env{'form.pickedcourse'},
                                                      $cdom,$cnum,'domain',$type,\%currsettings);
     $r->print('</form>');
+    my @actions =
+        ('<a href="javascript:changePage(document.selfenrollchg,'."'menu'".')">'.
+         &mt('Pick another action').'</a>');
+    $r->print('<br /><br />'.&Apache::lonhtmlcommon::actionbox(\@actions));
     return;
 }
 
@@ -1536,9 +1552,9 @@
     my ($type) = @_;
     my $dctitle = &Apache::lonnet::plaintext('dc');
     if ($type eq 'Community') {
-        return &mt('Community settings modifiable only by [_1] for:',$dctitle);
+        return &mt('Community settings modifiable only by [_1]',$dctitle);
     } else {
-        return &mt('Course settings modifiable only by [_1] for:',$dctitle);
+        return &mt('Course settings modifiable only by [_1]',$dctitle);
     }
 }
 
@@ -1922,8 +1938,8 @@
         $reply = $chgresponse.$nochgresponse.$warning;
     }
     &print_header($r,$type);
-    my $mainheader = &modifiable_only_title($type);
-    $reply = '<h3>'.$mainheader.' <span class="LC_nobreak">'.$cdesc.'</span></h3>'."\n".
+    $reply = '<h3>'.&modifiable_only_title($type).'</h3>'."\n".
+             '<h4><span class="LC_nobreak">'.&mt($type).': '.$cdesc.'</span></h4>'."\n".
              '<p>'.$reply.'</p>'."\n".
              '<form action="/adm/modifycourse" method="post" name="processparms">'.
              &hidden_form_elements();
@@ -1938,7 +1954,8 @@
         push(@actions, '<a href="'.$escuri.'">'.
                   &mt('Go to Automated Enrollment Manager for course').'</a>');
     }
-    $reply .= &Apache::lonhtmlcommon::actionbox(\@actions).'</form>';
+    $reply .= '</form>'.
+              '<br />'.&Apache::lonhtmlcommon::actionbox(\@actions);
     $r->print($reply);
     return;
 }
@@ -2107,10 +2124,9 @@
     my ($r,$cdom,$cnum,$cdesc,$domdesc,$type) = @_;
     &print_header($r,$type);
     my $lctype = lc($type);
-    my $headline = &mt("Disk space quotas for $lctype: [_1]",
-                     '<span class="LC_nobreak">'.$cdesc.'</span>');
-    $r->print('<form action="/adm/modifycourse" method="post" name="processquota">'."\n".
-              '<h3>'.$headline.'</h3>');
+    $r->print('<h3>'.&mt("Disk space quotas for $lctype")."</h3>\n".
+              '<h4><span class="LC_nobreak">'.&mt($type).' :'.$cdesc.'</span></h4>'."\n".
+              '<form action="/adm/modifycourse" method="post" name="processquota">'."\n");
     my %oldsettings = &Apache::lonnet::get('environment',['internal.coursequota','internal.uploadquota'],$cdom,$cnum);
     my %staticdefaults = (
                            coursequota   => 20,
@@ -2206,19 +2222,20 @@
                       $putreply);
         }
     }
-    $r->print('<p>'.
-              '<a href="javascript:changePage(document.processquota,'."'menu'".')">'.
-              &mt('Pick another action').'</a>');
     $r->print(&hidden_form_elements().'</form>');
+    my @actions =
+        ('<a href="javascript:changePage(document.processparms,'."'menu'".')">'.
+         &mt('Pick another action').'</a>');
+    $r->print('<br />'.&Apache::lonhtmlcommon::actionbox(\@actions));
     return;
 }
 
 sub modify_anonsurvey_threshold {
     my ($r,$cdom,$cnum,$cdesc,$domdesc,$type) = @_;
     &print_header($r,$type);
-    $r->print('<form action="/adm/modifycourse" method="post" name="processthreshold">'."\n".
-              '<h3>'.&mt('Responder threshold required for display of anonymous survey submissions:').
-              ' <span class="LC_nobreak">'.$cdesc.'</span></h3><br />');
+    $r->print('<h3>'.&mt('Responder threshold required for display of anonymous survey submissions').'</h3>'."\n".
+              '<h4><span class="LC_nobreak">'.&mt($type).': '.$cdesc.'</span></h4>'."\n".
+              '<form action="/adm/modifycourse" method="post" name="processthreshold">'."\n");
     my %oldsettings = &Apache::lonnet::get('environment',['internal.anonsurvey_threshold'],$cdom,$cnum);
     my %domconfig =
         &Apache::lonnet::get_dom('configuration',['coursedefaults'],$cdom);
@@ -2268,10 +2285,11 @@
             $r->print(&mt('The proposed responder threshold for display of anonymous submissions contained invalid characters, so the threshold is unchanged.'));
         }
     }
-    $r->print('<p>'.
-              '<a href="javascript:changePage(document.processthreshold,'."'menu'".')">'.
-              &mt('Pick another action').'</a></p>');
     $r->print(&hidden_form_elements().'</form>');
+    my @actions =
+        ('<a href="javascript:changePage(document.processthreshold,'."'menu'".')">'.
+         &mt('Pick another action').'</a>');
+    $r->print('<br />'.&Apache::lonhtmlcommon::actionbox(\@actions));
     return;
 }
 
@@ -2283,10 +2301,11 @@
                 unch => 'Post submission behavior of the Submit button is unchanged.',
                 erro => 'An error occurred when saving your proposed changes.',
                 inva => 'An invalid response was recorded.',
-                pick => 'Pick another action',
+                back => 'Pick another action',
              );
-    $r->print('<form action="/adm/modifycourse" method="post" name="processpostsubmit">'."\n".
-              '<h3>'.$lt{'subb'}.' <span class="LC_nobreak">('.$cdesc.')</span></h3><br />');
+    $r->print('<h3>'.$lt{'subb'}.'</h3>'."\n".
+              '<h4><span class="LC_nobreak">'.&mt($type).': '.$cdesc.'</span></h4>'."\n".
+              '<form action="/adm/modifycourse" method="post" name="processpostsubmit"><p>'."\n");
     my %oldsettings = 
         &Apache::lonnet::get('environment',['internal.postsubmit','internal.postsubtimeout','internal.coursecode','internal.textbook'],$cdom,$cnum);
     my $postsubmit = $env{'form.postsubmit'};
@@ -2344,10 +2363,11 @@
     } else {
         $r->print($lt{'inva'}.' '.$lt{'unch'});
     }
-    $r->print('<p>'.
-              '<a href="javascript:changePage(document.processpostsubmit,'."'menu'".')">'.
-              &mt('Pick another action').'</a></p>');
-    $r->print(&hidden_form_elements().'</form>');
+    $r->print('</p>'.&hidden_form_elements().'</form>');
+    my @actions =
+        ('<a href="javascript:changePage(document.processpostsubmit,'."'menu'".')">'.
+         $lt{'back'}.'</a>');
+    $r->print('<br />'.&Apache::lonhtmlcommon::actionbox(\@actions));
     return;
 }
 
@@ -2364,9 +2384,9 @@
         $desc{'categories'} = &mt('Assigned categories for this course');
         $ccrole = 'cc';
     }
-    $r->print('
-<form action="/adm/modifycourse" method="post" name="processcat">
-<h3>'.&mt('Category settings').'</h3>');
+    $r->print('<h3>'.&mt('Category settings').'</h3>'."\n".
+              '<h4><span class="LC_nobreak">'.&mt($type).': '.$cdesc.'</span></h4>'."\n".
+              '<form action="/adm/modifycourse" method="post" name="processcat"><br />'."\n");
     my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$cdom);
     my @cat_params = &catalog_settable($domconf{'coursecategories'},$type);
     if (@cat_params > 0) {
@@ -2481,10 +2501,11 @@
             $r->print(&mt('Category settings for courses in this domain should be modified in course context (via "[_1]Course Configuration[_2]").','<a href="$escuri">','</a>').'<br />');
         }
     }
-    $r->print('<br />'."\n".
-              '<a href="javascript:changePage(document.processcat,'."'menu'".')">'.
-              &mt('Pick another action').'</a>');
-    $r->print(&hidden_form_elements().'</form>');
+    $r->print('<br />'.&hidden_form_elements().'</form>');
+    my @actions =
+        ('<a href="javascript:changePage(document.processcat,'."'menu'".')">'.
+         &mt('Pick another action').'</a>');
+    $r->print('<br />'.&Apache::lonhtmlcommon::actionbox(\@actions));
     return;
 }
 
@@ -2500,9 +2521,9 @@
                 'back' => 'Pick another action',
     );
     &print_header($r,$type);
-    $r->print('<form action="/adm/modifycourse" method="post" name="processltiauth">'."\n".
-              '<h3>'.$lt{'requ'}.
-              ' <span class="LC_nobreak">'.$cdesc.'</span></h3>');
+    $r->print('<h3>'.$lt{'requ'}.'</h3>'."\n".
+              '<h4><span class="LC_nobreak">'.&mt($type).': '.$cdesc.'</span></h4>'."\n".
+              '<form action="/adm/modifycourse" method="post" name="processltiauth">'."\n");
     my %oldsettings = &Apache::lonnet::get('environment',['internal.ltiauth'],$cdom,$cnum);
     my $oldltiauth = $oldsettings{'internal.ltiauth'};
     my $domdef;
@@ -2583,11 +2604,12 @@
     } elsif ($change) {
         $r->print(&mt('Re-authentication requirement for LTI launch of deep-linked changed'));
     }
-    $r->print('<br />'.$status);
-    $r->print('</p><p>'.
-              '<a href="javascript:changePage(document.processltiauth,'."'menu'".')">'.
-              $lt{'back'}.'</a></p>');
-    $r->print(&hidden_form_elements().'</form>');
+    $r->print('<br />'.$status.'</p>'.
+              &hidden_form_elements().'</form>');
+    my @actions =
+        ('<a href="javascript:changePage(document.processltiauth,'."'menu'".')">'.
+         $lt{'back'}.'</a>');
+    $r->print('<br />'.&Apache::lonhtmlcommon::actionbox(\@actions));
     return;
 }
 
@@ -2595,9 +2617,9 @@
     my ($r,$cdom,$cnum,$cdesc,$domdesc,$type) = @_;
     my %titles = &exttool_titles($type);
     &print_header($r,$type);
-    $r->print('<form action="/adm/modifycourse" method="post" name="processexttool">'."\n".
-              '<h3>'.$titles{'extt'}.'</h3>'.
-              '<h4><span class="LC_nobreak">'.$type.': '.$cdesc.'</span></h4>');
+    $r->print('<h3>'.$titles{'extt'}.'</h3>'."\n".
+              '<h4><span class="LC_nobreak">'.$type.': '.$cdesc.'</span></h4>'."\n".
+              '<form action="/adm/modifycourse" method="post" name="processexttool">'."\n");
     my %oldsettings = &Apache::lonnet::get('environment',['internal.exttool'],$cdom,$cnum);
     my $oldcrsexttool = $oldsettings{'internal.exttool'};
     my $domdefdom = 1;
@@ -2691,11 +2713,12 @@
     } elsif ($change) {
         $r->print(&mt('External Tool permissions changed'));
     }
-    $r->print('<br />'.$status);
-    $r->print('</p><p>'.
-              '<a href="javascript:changePage(document.processexttool,'."'menu'".')">'.
-              $titles{'back'}.'</a></p>');
-    $r->print(&hidden_form_elements().'</form>');
+    $r->print('<br />'.$status.'</p>'.
+              &hidden_form_elements().'</form>');
+    my @actions =
+        ('<a href="javascript:changePage(document.processexttool,'."'menu'".')">'.
+         $titles{'back'}.'</a>');
+    $r->print('<br />'.&Apache::lonhtmlcommon::actionbox(\@actions));
     return;
 }
 
@@ -2943,7 +2966,15 @@
     } else {
         $bread_text = 'Course Settings';
     }
-    $r->print(&Apache::lonhtmlcommon::breadcrumbs($bread_text));
+    my $helpcomponent;
+    if ($env{'form.phase'} eq 'menu') {
+        if ($type eq 'Community') {
+            $helpcomponent = 'Domain_Modify_Community';
+        } else {
+            $helpcomponent = 'Domain_Modify_Course';
+        }
+    }
+    $r->print(&Apache::lonhtmlcommon::breadcrumbs($bread_text,$helpcomponent));
     return;
 }
 
Index: doc/loncapafiles/loncapafiles.lpml
diff -u doc/loncapafiles/loncapafiles.lpml:1.1041 doc/loncapafiles/loncapafiles.lpml:1.1042
--- doc/loncapafiles/loncapafiles.lpml:1.1041	Sun Jul 23 18:27:44 2023
+++ doc/loncapafiles/loncapafiles.lpml	Thu Aug  3 15:57:24 2023
@@ -2,7 +2,7 @@
  "http://lpml.sourceforge.net/DTD/lpml.dtd">
 <!-- loncapafiles.lpml -->
 
-<!-- $Id: loncapafiles.lpml,v 1.1041 2023/07/23 18:27:44 raeburn Exp $ -->
+<!-- $Id: loncapafiles.lpml,v 1.1042 2023/08/03 15:57:24 raeburn Exp $ -->
 
 <!--
 
@@ -3808,6 +3808,8 @@
 Domain_Crontab_Entries.tex;
 Domain_Editing_Custom_Roles.tex;
 Domain_Manual_Title_Page.tex;
+Domain_Modify_Course.tex;
+Domain_Modify_Community.tex
 Domain_Role_Approvals.tex;
 Domain_Role_Logs.tex;
 Domain_User_Access_Logs.tex;

Index: loncom/html/adm/help/tex/Domain_Modify_Course.tex
+++ loncom/html/adm/help/tex/Domain_Modify_Course.tex
\label{Domain_Modify_Course}

Although almost all course settings can be modified by a Course Coordinator, the following may only be set or modified by a Domain Coordinator:
\begin{itemize}

\item Course owner (permitted to assign Course Coordinator roles in a course).
\item Institutional code and default authentication (both required for auto-enrollment of students from institutional datafeeds).
\item Unique six character course identifier which students can use to search the course catalog, when catalog type is set to ``Code search form''.
\item Override defaults for who configures self-enrollment for a specific course.
\item Override default for lifetime of "temporary" MySQL tables containing student performance data.
\item Total disk space allocated for storage of portfolio files in all groups in a course.
\item Disk space allocated for storage of content uploaded directly to a course via Course Editor.
\item Responder threshold required to display anonymous survey submissions.
\item Override defaults for submit button behavior post-submission for a specific course.
\item Override default for requirement for re-authentication for LTI-limited launch of deep-linked item.
\item Override default permissions for external tools use for a specific course.
\item Hiding/unhiding a course from the course catalog (although can be configured to be modifiable by a Course Coordinator in course context).
\item Manual cataloging of a course (although can be configured to be modifiable by a Course Coordinator in course context).

\end{itemize}

When a Domain Coordinator follows the ``View or modify a course or community'' link in the Main menu a course search web form will be displayed, which can be used to show courses which match specified search criteria.

There are two options for a selected course -- either enter the course with an ad hoc Course Coordinator role, or display eight icons/links for viewing or changing values for the modifiable settings described above.

Unless the course container is a placement test, there will be an additional icon/link: ``Display current settings for automated enrollment'' which can be used to view the current automated enrollment settings in effect in the selected course, categorized according to who may modify them. That screen also includes two links:
\begin{itemize}
\item A link to the Automated Enrollment Manager in the course.
\item A link to the page where the Domain Coordinator can change DC-only modifiable settings.
\end{itemize}

Index: loncom/html/adm/help/tex/Domain_Modify_Community.tex
+++ loncom/html/adm/help/tex/Domain_Modify_Community.tex
\label{Domain_Modify_Community}

Although almost all community settings can be modified by a Community Coordinator, the following may only be set or modified by a Domain Coordinator:
\begin{itemize}

\item Community owner (permitted to assign Community Coordinator roles in a community).
\item Unique six character community identifier which students can use to search the catalog, when catalog type is set to ``Code search form''.
\item Override defaults for who configures self-enrollment for a specific community.
\item Override default for lifetime of "temporary" MySQL tables containing member performance data.
\item Total disk space allocated for storage of portfolio files in all groups in a community.
\item Disk space allocated for storage of content uploaded directly to a community via Community Editor.
\item Responder threshold required to display anonymous survey submissions.
\item Override defaults for submit button behavior post-submission for a specific community.
\item Override default for requirement for re-authentication for LTI-limited launch of deep-linked item.
\item Override default permissions for external tools use for a specific community.
\item Hiding/unhiding a community from the Course/Community catalog (although can be configured to be modifiable by a Coordinator in community context).
\item Manual cataloging of a community (although can be configured to be modifiable by a Community Coordinator in community context).

\end{itemize}

When a Domain Coordinator follows the ``View or modify a course or community'' link in the Main menu, a course/community search web form will be displayed which can be used to show communities which match specified search criteria.
 
There are two options for a selected community -- either enter the community with an ad hoc Coordinator role, or display seven icons/links for viewing or changing values for the modifiable settings described above.


More information about the LON-CAPA-cvs mailing list