[LON-CAPA-cvs] cvs: loncom /interface loncommon.pm loncreateuser.pm lonuserutils.pm
raeburn
raeburn at source.lon-capa.org
Mon Dec 15 14:17:39 EST 2025
raeburn Mon Dec 15 19:17:39 2025 EDT
Modified files:
/loncom/interface loncommon.pm loncreateuser.pm lonuserutils.pm
Log:
- WCAG 2 compliance.
- Replace use of <table> with <div> for layout
- Include labels for form elements
- Include headers for tables
-------------- next part --------------
Index: loncom/interface/loncommon.pm
diff -u loncom/interface/loncommon.pm:1.1488 loncom/interface/loncommon.pm:1.1489
--- loncom/interface/loncommon.pm:1.1488 Sat Dec 13 05:56:01 2025
+++ loncom/interface/loncommon.pm Mon Dec 15 19:17:39 2025
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.1488 2025/12/13 05:56:01 raeburn Exp $
+# $Id: loncommon.pm,v 1.1489 2025/12/15 19:17:39 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1232,7 +1232,7 @@
</script>
END
# output the initial values for the selection lists
- $result .= "<select size=\"1\" name=\"$firstselectname\" onchange=\"select1${suffix}_changed();$onchangefirst\">\n";
+ $result .= "<select size=\"1\" name=\"$firstselectname\" id=\"$firstselectname\" onchange=\"select1${suffix}_changed();$onchangefirst\">\n";
my @order = sort(keys(%{$hashref}));
if (ref($menuorder) eq 'ARRAY') {
@order = @{$menuorder};
@@ -1259,7 +1259,7 @@
if ($onchangesecond) {
$result .= ' onchange="'.$onchangesecond.'"';
}
- $result .= ">\n";
+ $result .= " id=\"$secondselectname\">\n";
my $seconddefault = $hashref->{$firstdefault}->{'default'};
my @secondorder = sort(keys(%select2));
@@ -1320,7 +1320,7 @@
my $template = "";
my $link;
-
+ my $title = &mt('Online Help');
$topic=~s/\W/\_/g;
if (!$stayOnPage) {
@@ -1339,24 +1339,22 @@
(($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self'))) {
$target = '';
}
+ $template = '<a'.$target.' href="'.$link.'" title="'.$title.'" class="LC_nounderline">';
if ($text ne "") {
- $template.='<span class="LC_help_open_topic">'
- .'<a'.$target.' href="'.$link.'">'
- .$text.'</a>';
+ $template = '<span class="LC_help_open_topic">'.$template.
+ '<span class="LC_underline">'.$text.'</span> ';
}
# (Always) Add the graphic
- my $title = &mt('Online Help');
my $helpicon=&lonhttpdurl("/adm/help/help.png");
if ($imgid ne '') {
$imgid = ' id="'.$imgid.'"';
}
- $template.=' <a'.$target.' href="'.$link.'" title="'.$title.'">'
- .'<img src="'.$helpicon.'" border="0"'
+ $template.=' <img src="'.$helpicon.'" border="0"'
.' alt="'.&mt('Help icon').'"'
.' title="'.$title.'" style="vertical-align:middle;"'.$imgid
.' /></a>';
- if ($text ne "") {
+ if ($text ne "") {
$template.='</span>';
}
return $template;
@@ -3579,21 +3577,24 @@
'onclick="'.$jscall.'" onchange="'.$jscall.'"'.
$krbcheck.$disabled.' />';
}
+ my $labeltext = &mt('Kerberos realm');
if (($can_assign{'krb4'} && $can_assign{'krb5'}) ||
($can_assign{'krb4'} && !$can_assign{'krb5'} &&
$in{'curr_authtype'} eq 'krb5') ||
(!$can_assign{'krb4'} && $can_assign{'krb5'} &&
$in{'curr_authtype'} eq 'krb4')) {
+ my $kerbtext = &mt('Choose Kerberos version');
$result .= &mt
('[_1] Kerberos authenticated with domain [_2] '.
'[_3] Version 4 [_4] Version 5 [_5]',
'<label>'.$authtype,
'</label><input type="text" size="10" name="krbarg" '.
'value="'.$krbarg.'" '.
- 'onchange="'.$jscall.'"'.$disabled.' />',
+ 'onchange="'.$jscall.'"'.$disabled.' aria-label="'.$labeltext.'" />',
+ '<fieldset class="LC_borderless"><legend class="LC_visually_hidden">'.$kerbtext.'</legend>'.
'<label><input type="radio" name="krbver" value="4" '.$check4.$disabled.' />',
'</label><label><input type="radio" name="krbver" value="5" '.$check5.$disabled.' />',
- '</label>');
+ '</label></fieldset>');
} elsif ($can_assign{'krb4'}) {
$result .= &mt
('[_1] Kerberos authenticated with domain [_2] '.
@@ -3601,7 +3602,7 @@
'<label>'.$authtype,
'</label><input type="text" size="10" name="krbarg" '.
'value="'.$krbarg.'" '.
- 'onchange="'.$jscall.'"'.$disabled.' />',
+ 'onchange="'.$jscall.'"'.$disabled.' aria-label="'.$labeltext.'" />',
'<label><input type="hidden" name="krbver" value="4" />',
'</label>');
} elsif ($can_assign{'krb5'}) {
@@ -3611,7 +3612,7 @@
'<label>'.$authtype,
'</label><input type="text" size="10" name="krbarg" '.
'value="'.$krbarg.'" '.
- 'onchange="'.$jscall.'"'.$disabled.' />',
+ 'onchange="'.$jscall.'"'.$disabled.' aria-label="'.$labeltext.'" />',
'<label><input type="hidden" name="krbver" value="5" />',
'</label>');
}
@@ -3667,8 +3668,9 @@
$authtype = '<input type="radio" name="login" value="int" '.$intcheck.
' onchange="'.$jscall.'" onclick="'.$jscall.'"'.$disabled.' />';
}
+ my $labeltext = &mt('initial password');
$autharg = '<input type="password" size="10" name="intarg" value="'.
- $intarg.'" onchange="'.$jscall.'"'.$disabled.' />';
+ $intarg.'" onchange="'.$jscall.'"'.$disabled.' aria-label="'.$labeltext.'" />';
$result = &mt
('[_1] Internally authenticated (with initial password [_2])',
'<label>'.$authtype,'</label>'.$autharg);
@@ -3726,8 +3728,9 @@
$loccheck.' onchange="'.$jscall.'" onclick="'.
$jscall.'"'.$disabled.' />';
}
+ my $labeltext = &mt('local authentication argument');
$autharg = '<input type="text" size="10" name="locarg" value="'.
- $locarg.'" onchange="'.$jscall.'"'.$disabled.' />';
+ $locarg.'" onchange="'.$jscall.'"'.$disabled.' aria-label="'.$labeltext.'" />';
$result = &mt('[_1] Local Authentication with argument [_2]',
'<label>'.$authtype,'</label>'.$autharg);
return $result;
@@ -7157,7 +7160,8 @@
#don't show menus for public users
if (!$public){
unless ($args->{'no_inline_menu'}) {
- $bodytag .= '<div class="LC_landmark" role="navigation" aria-label="Secondary Links">'.
+ my $labeltext = &HTML::Entities::encode(&mt('Secondary links'));
+ $bodytag .= '<div class="LC_landmark" role="navigation" aria-label="'.$labeltext.'">'.
Apache::lonmenu::secondary_menu($httphost,$ltiscope,$ltimenu,
$args->{'no_primary_menu'},
$menucoll,$menuref,
@@ -7898,11 +7902,25 @@
background: $tabbg;
}
+th.LC_zero_height,
td.LC_zero_height {
line-height: 0;
cellpadding: 0;
}
+div.LC_grid {
+ display: table;
+}
+
+div.LC_grid_row {
+ display: table-row;
+}
+
+div.LC_grid_cell {
+ display: table-cell;
+ padding: 2px 4px 2px 4px;
+}
+
table.LC_data_table {
border: 1px solid #000000;
border-collapse: separate;
@@ -8059,6 +8077,7 @@
}
table.LC_createuser {
+ padding: 0;
}
table.LC_createuser tr.LC_section_row td {
@@ -8918,6 +8937,14 @@
border: 0;
}
+.LC_nounderline {
+ text-decoration: none;
+}
+
+.LC_underline {
+ text-decoration: underline;
+}
+
.LC_FormSectionClearButton input {
background-color:transparent;
border: none;
@@ -8955,10 +8982,18 @@
padding: 4px;
}
-fieldset.LC_grace {
+fieldset.LC_grace,
+fieldset#LC_additionalrecips {
display:inline;
}
+fieldset.LC_borderless {
+ display:inline;
+ border: 0;
+ padding: 0;
+ margin: 0;
+}
+
fieldset.LC_delete_slot > legend,
fieldset.LC_grace > legend {
font-weight: normal;
@@ -12177,6 +12212,10 @@
'exact' => 'is',
'contains' => 'contains',
'begins' => 'begins with',
+ 'srchterm' => 'search term value',
+ 'srchin' => 'search extent',
+ 'srchscope' => 'search match scope',
+ 'srchfield' => 'search field',
);
my %js_lt=&Apache::lonlocal::texthash(
'youm' => "You must include some text to search for.",
@@ -12194,7 +12233,7 @@
my $allow_blank = 1;
if ($fixeddom) {
$allow_blank = 0;
- $domform = &select_dom_form($currdom,'srchdomain',$allow_blank,1,undef,[$currdom]);
+ $domform = &select_dom_form($currdom,'srchdomain',$allow_blank,1,undef,[$currdom],undef,'','srchdomain');
} else {
my $defdom = $env{'request.role.domain'};
my ($trusted,$untrusted);
@@ -12205,9 +12244,9 @@
} elsif ($context eq 'domain') {
($trusted,$untrusted) = &Apache::lonnet::trusted_domains('domroles',$defdom);
}
- $domform = &select_dom_form($currdom,'srchdomain',$allow_blank,1,undef,$trusted,$untrusted);
+ $domform = &select_dom_form($currdom,'srchdomain',$allow_blank,1,undef,$trusted,$untrusted,'','srchdomain');
}
- my $srchinsel = ' <select name="srchin">';
+ my $srchinsel = ' <select name="srchin" aria-label="'.$html_lt{'srchin'}.'">';
my @srchins = ('crs','dom','alc','instd');
@@ -12229,7 +12268,7 @@
}
$srchinsel .= "\n </select>\n";
- my $srchbysel = ' <select name="srchby">';
+ my $srchbysel = ' <select name="srchby" aria-label="'.$html_lt{'srchfield'}.'">';
foreach my $option ('lastname','lastfirst','uname') {
if ($curr_selected{'srchby'} eq $option) {
$srchbysel .= '
@@ -12241,7 +12280,7 @@
}
$srchbysel .= "\n </select>\n";
- my $srchtypesel = ' <select name="srchtype">';
+ my $srchtypesel = ' <select name="srchtype" aria-label="'.$html_lt{'srchscope'}.'">';
foreach my $option ('begins','contains','exact') {
if ($curr_selected{'srchtype'} eq $option) {
$srchtypesel .= '
@@ -12390,13 +12429,13 @@
END_BLOCK
$output .= &Apache::lonhtmlcommon::start_pick_box().
- &Apache::lonhtmlcommon::row_title($html_lt{'doma'}).
+ &Apache::lonhtmlcommon::row_title('<label for="srchdomain">'.$html_lt{'doma'}.'</label>').
$domform.
&Apache::lonhtmlcommon::row_closure().
&Apache::lonhtmlcommon::row_title($html_lt{'usr'}).
$srchbysel.
$srchtypesel.
- '<input type="text" size="15" name="srchterm" value="'.$srchterm.'" />'.
+ '<input type="text" size="15" name="srchterm" value="'.$srchterm.'" aria-label="'.$html_lt{'srchterm'}.'" />'.
$srchinsel.
&Apache::lonhtmlcommon::row_closure(1).
&Apache::lonhtmlcommon::end_pick_box().
@@ -18854,12 +18893,14 @@
$filter->{'ownerdomfilter'} =
&LONCAPA::clean_domain($filter->{$item});
$ownerdomselectform = &select_dom_form($filter->{'ownerdomfilter'},
- 'ownerdomfilter',1);
+ 'ownerdomfilter',1,'','','',
+ '','','ownerdomfilter');
} elsif ($item eq 'personfilter') {
$filter->{$item} = &LONCAPA::clean_username($filter->{$item});
} elsif ($item eq 'persondomfilter') {
$persondomselectform = &select_dom_form($filter->{'persondomfilter'},
- 'persondomfilter',1);
+ 'persondomfilter',1,'','','',
+ '','','persondomfilter');
} else {
$filter->{$item} =~ s/\W//g;
}
@@ -18876,12 +18917,13 @@
}
if ($fixeddom) {
$domainselectform = '<input type="hidden" name="domainfilter"'.
- ' value="'.$codedom.'" />'.
+ ' id="domainfilter" value="'.$codedom.'" />'.
&Apache::lonnet::domain($codedom,'description');
} else {
$domainselectform = &select_dom_form($filter->{$item},
'domainfilter',
- $allow_blank,'',$onchange);
+ $allow_blank,'',$onchange,'',
+ '','','domainfilter');
}
} else {
$list->{$item} = &HTML::Entities::encode($filter->{$item},'<>&"');
@@ -18889,11 +18931,11 @@
}
# last course activity filter and selection
- $sincefilterform = &timebased_select_form('sincefilter',$filter);
+ $sincefilterform = &timebased_select_form('sincefilter',$filter,'sincefilter');
# course created filter and selection
if (exists($filter->{'createdfilter'})) {
- $createdfilterform = &timebased_select_form('createdfilter',$filter);
+ $createdfilterform = &timebased_select_form('createdfilter',$filter,'createdfilter');
}
my $prefix = $crstype;
@@ -18919,11 +18961,11 @@
} elsif ($crstype eq 'Placement') {
$typeval = 'Placement';
}
- $typeselectform = '<input type="hidden" name="type" value="'.$typeval.'" />';
+ $typeselectform = '<input type="hidden" name="type" id="type" value="'.$typeval.'" />';
} else {
$typeselectform = '<select name="type" size="1"';
if ($onchange) {
- $typeselectform .= ' onchange="'.$onchange.'"';
+ $typeselectform .= ' onchange="'.$onchange.'" id="type"';
}
$typeselectform .= '>'."\n";
foreach my $posstype ('Course','Community','Placement') {
@@ -18974,7 +19016,7 @@
}
if ($instcodeform eq '') {
$instcodeform =
- '<input type="text" name="instcodefilter" size="10" value="'.
+ '<input type="text" name="instcodefilter" id="instcodefilter" size="10" value="'.
$list->{'instcodefilter'}.'" />';
$instcodetitle = $lt{'ins'};
} else {
@@ -19021,17 +19063,17 @@
}
$output .= "<br />\n".&Apache::lonhtmlcommon::start_pick_box();
if ($sincefilterform) {
- $output .= &Apache::lonhtmlcommon::row_title($lt{'cac'})
+ $output .= &Apache::lonhtmlcommon::row_title('<label for="sincefilter">'.$lt{'cac'}.'</label>')
.$sincefilterform
.&Apache::lonhtmlcommon::row_closure();
}
if ($createdfilterform) {
- $output .= &Apache::lonhtmlcommon::row_title($lt{'ccr'})
+ $output .= &Apache::lonhtmlcommon::row_title('<label for="createdfilter">'.$lt{'ccr'}.'</label>')
.$createdfilterform
.&Apache::lonhtmlcommon::row_closure();
}
if ($domainselectform) {
- $output .= &Apache::lonhtmlcommon::row_title($lt{'cdo'})
+ $output .= &Apache::lonhtmlcommon::row_title('<label for="domainfilter">'.$lt{'cdo'}.'</label>')
.$domainselectform
.&Apache::lonhtmlcommon::row_closure();
}
@@ -19039,35 +19081,53 @@
if (($formname eq 'ccrs') || ($formname eq 'requestcrs')) {
$output .= $typeselectform;
} else {
- $output .= &Apache::lonhtmlcommon::row_title($lt{'cog'})
+ $output .= &Apache::lonhtmlcommon::row_title('<label for="type">'.$lt{'cog'}.'</label>')
.$typeselectform
.&Apache::lonhtmlcommon::row_closure();
}
}
if ($instcodeform) {
- $output .= &Apache::lonhtmlcommon::row_title($instcodetitle)
- .$instcodeform
- .&Apache::lonhtmlcommon::row_closure();
+ if ($$numtitlesref) {
+ $output .= &Apache::lonhtmlcommon::row_title($instcodetitle)
+ .$instcodeform
+ .&Apache::lonhtmlcommon::row_closure();
+ } else {
+ $output .= &Apache::lonhtmlcommon::row_title('<label for="instcodefilter">'.$instcodetitle.'</label>')
+ .$instcodeform
+ .&Apache::lonhtmlcommon::row_closure();
+ }
}
if (exists($filter->{'ownerfilter'})) {
$output .= &Apache::lonhtmlcommon::row_title($lt{'cow'}).
- '<table><tr><td>'.&mt('Username').'<br />'.
+ '<div role="grid" class="LC_grid" >'.
+ '<div role = "row" class="LC_grid_row">'.
+ '<div role = "gridcell" class="LC_grid_cell">'.
+ '<label>'.&mt('Username').'<br />'.
'<input type="text" name="ownerfilter" size="20" value="'.
- $list->{'ownerfilter'}.'" /></td><td>'.&mt('Domain').'<br />'.
- $ownerdomselectform.'</td></tr></table>'.
+ $list->{'ownerfilter'}.'" /></label></div>'.
+ '<div role = "gridcell" class="LC_grid_cell">'.
+ '<label for="ownerdomfilter">'.&mt('Domain').'</label><br />'.
+ $ownerdomselectform.'</div>'.
+ '</div></div>'.
&Apache::lonhtmlcommon::row_closure();
}
if (exists($filter->{'personfilter'})) {
$output .= &Apache::lonhtmlcommon::row_title($lt{'cop'}).
- '<table><tr><td>'.&mt('Username').'<br />'.
+ '<div role="grid" class="LC_grid" >'.
+ '<div role = "row" class="LC_grid_row">'.
+ '<div role = "gridcell" class="LC_grid_cell">'.
+ '<label>'.&mt('Username').'<br />'.
'<input type="text" name="personfilter" size="20" value="'.
- $list->{'personfilter'}.'" /></td><td>'.&mt('Domain').'<br />'.
- $persondomselectform.'</td></tr></table>'.
+ $list->{'personfilter'}.'" /></label></div>'.
+ '<div role = "gridcell" class="LC_grid_cell">'.
+ '<label for="persondomfilter">'.&mt('Domain').'</label><br />'.
+ $persondomselectform.'</div>'.
+ '</div></div>'.
&Apache::lonhtmlcommon::row_closure();
}
if (exists($filter->{'coursefilter'})) {
- $output .= &Apache::lonhtmlcommon::row_title(&mt('LON-CAPA course ID'))
- .'<input type="text" name="coursefilter" size="25" value="'
+ $output .= &Apache::lonhtmlcommon::row_title('<label for="coursefilter">'.&mt('LON-CAPA course ID').'</label>')
+ .'<input type="text" name="coursefilter" id="coursefilter" size="25" value="'
.$list->{'coursefilter'}.'" />'
.&Apache::lonhtmlcommon::row_closure();
}
@@ -19076,8 +19136,8 @@
$cloneableonlyform.&Apache::lonhtmlcommon::row_closure();
}
if (exists($filter->{'descriptfilter'})) {
- $output .= &Apache::lonhtmlcommon::row_title($lt{'cde'})
- .'<input type="text" name="descriptfilter" size="40" value="'
+ $output .= &Apache::lonhtmlcommon::row_title('<label for="descriptfilter">'.$lt{'cde'}.'</label>')
+ .'<input type="text" name="descriptfilter" id="descriptfilter" size="40" value="'
.$list->{'descriptfilter'}.'" />'
.&Apache::lonhtmlcommon::row_closure(1);
}
@@ -19102,6 +19162,17 @@
filter - anonymous hash of criteria and their values
+id (optional) - will be used as the id attribute of the select element.
+
+onchange (optional) - can include a javascript onchange item
+
+readonly (optional) - if true will cause the select form
+to be disabled
+
+aria_labelledby (optional) - will be included as the aria-labelledby
+attribute of the select element.
+
+
Returns: HTML for a select box contained a blank, then six time selections,
with value set in incoming form variables currently selected.
@@ -19110,7 +19181,7 @@
=cut
sub timebased_select_form {
- my ($item,$filter) = @_;
+ my ($item,$filter,$id,$onchange,$readonly,$aria_labelledby) = @_;
if (ref($filter) eq 'HASH') {
$filter->{$item} =~ s/[^\d-]//g;
if (!$filter->{$item}) { $filter->{$item}=-1; }
@@ -19126,7 +19197,8 @@
'31104000' => &mt('last year'),
'select_form_order' =>
['-1','86400','604800','2592000','7776000',
- '15552000','31104000']});
+ '15552000','31104000']},
+ $onchange,$readonly,$id,$aria_labelledby);
}
}
Index: loncom/interface/loncreateuser.pm
diff -u loncom/interface/loncreateuser.pm:1.488 loncom/interface/loncreateuser.pm:1.489
--- loncom/interface/loncreateuser.pm:1.488 Sat Dec 13 13:33:33 2025
+++ loncom/interface/loncreateuser.pm Mon Dec 15 19:17:39 2025
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Create a user
#
-# $Id: loncreateuser.pm,v 1.488 2025/12/13 13:33:33 raeburn Exp $
+# $Id: loncreateuser.pm,v 1.489 2025/12/15 19:17:39 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1026,7 +1026,7 @@
$actiontext = $lt{'srvu'};
$fixeddom = 1;
}
- $r->print("<h3>$actiontext</h3>");
+ $r->print('<h2 class="LC_heading_2">'.$actiontext.'</h2>');
if ($env{'form.origform'} ne 'crtusername') {
if ($response) {
$r->print("\n<div>$response</div>".
@@ -1179,17 +1179,15 @@
<input type="hidden" name="srchin" value="dom" />
<input type="hidden" name="forcenewuser" value="1" />
<input type="hidden" name="origform" value="crtusername" />
-<h3>$title</h3>
+<h2 class="LC_heading_2">$title</h2>
$showresponse
-<table>
- <tr>
- <td>$lt{'usr'}:</td>
- <td><input type="text" size="15" name="srchterm" /></td>
- <td> $lt{'dom'}:</td><td>$domform</td>
- <td> $sellink </td>
- <td> <input name="userrole" type="submit" value="$buttontext" /></td>
- </tr>
-</table>
+<div>
+ <label>$lt{'usr'}: <input type="text" size="15" name="srchterm" /></label>
+
+ <label>$lt{'dom'}:$domform</label>
+ $sellink
+ <input name="userrole" type="submit" value="$buttontext" />
+</div>
</form>
ENDDOCUMENT
}
@@ -1256,6 +1254,7 @@
'stusel' => "Select a user to enroll as a student",
'memsel' => "Select a user to enroll as a member",
'vacsel' => "Select a user to view access log",
+ 'seluser' => "Select",
'username' => "username",
'domain' => "domain",
'lastname' => "last name",
@@ -1299,9 +1298,9 @@
}
$r->print(&entry_form($srch->{'srchdomain'},$srch,undef,$context,undef,$crstype));
if ($readonly) {
- $r->print('<h3>'.$lt{'suvr'}.'</h3>');
+ $r->print('<h2 class="LC_heading_2">'.$lt{'suvr'}.'</h2>');
} else {
- $r->print('<h3>'.$lt{'usel'}.'</h3>');
+ $r->print('<h2 class="LC_heading_2">'.$lt{'usel'}.'</h2>');
}
} elsif ($env{'form.action'} eq 'singlestudent') {
$r->print($jscript."<b>");
@@ -1312,23 +1311,23 @@
}
$r->print("</b><br />");
$r->print(&entry_form($srch->{'srchdomain'},$srch,undef,$context,undef,$crstype));
- $r->print('</form><h3>');
+ $r->print('</form><h2 class="LC_heading_2">');
if ($crstype eq 'Community') {
$r->print($lt{'memsel'});
} else {
$r->print($lt{'stusel'});
}
- $r->print('</h3>');
+ $r->print('</h2>');
} elsif ($env{'form.action'} eq 'accesslogs') {
$r->print("<b>$lt{'srcva'}</b><br />");
$r->print(&entry_form($srch->{'srchdomain'},$srch,undef,$context,undef,undef,1));
- $r->print('<h3>'.$lt{'vacsel'}.'</h3>');
+ $r->print('<h2 class="LC_heading_2">'.$lt{'vacsel'}.'</h2>');
}
}
$r->print('<form name="usersrchform" method="post" action="">'.
&Apache::loncommon::start_data_table()."\n".
&Apache::loncommon::start_data_table_header_row()."\n".
- ' <th> </th>'."\n");
+ ' <th>'.$lt{'seluser'}.'</th>'."\n");
foreach my $field (@fields) {
$r->print(' <th><a href="javascript:document.usersrchform.sortby.value='.
"'".$field."'".';document.usersrchform.submit();">'.
@@ -1678,7 +1677,7 @@
'requestcourses').
&Apache::loncommon::end_data_table());
}
- $r->print('</div>'."\n".'<div class="LC_left_float"><h3>'.
+ $r->print('</div>'."\n".'<div class="LC_left_float"><h3 class="LC_heading_3">'.
$lt{'lg'}.'</h3>');
my ($fixedauth,$varauth,$authmsg);
if (ref($rulematch{$ccuname.':'.$ccdomain}) eq 'HASH') {
@@ -1982,15 +1981,15 @@
}
my $cid = $env{'request.course.id'};
my ($cnum,$cdom) = &Apache::lonuserutils::get_course_identity($cid);
- my $date_table = '<h3>'.&mt('Starting and Ending Dates').'</h3>'."\n".
+ my $date_table = '<h3 class="LC_heading_3">'.&mt('Starting and Ending Dates').'</h3>'."\n".
&Apache::lonuserutils::date_setting_table(undef,undef,$context,
undef,$formname,$permission);
my $rowtitle = 'Section';
- my $secbox = '<h3>'.&mt('Section and Credits').'</h3>'."\n".
+ my $secbox = '<h3 class="LC_heading_3">'.&mt('Section and Credits').'</h3>'."\n".
&Apache::lonuserutils::section_picker($cdom,$cnum,'st',$rowtitle,
$permission,$context,'',$crstype,
$showcredits,$credits);
- my $output = $date_table.$secbox;
+ my $output = '<div>'.$date_table.'</div><div>'.$secbox.'</div>';
return $output;
}
@@ -2329,10 +2328,12 @@
&Apache::loncommon::end_data_table_row();
}
}
- unless($output{$type} eq '') {
- $output{$type} = '<tr class="LC_info_row">'.
- "<td align='center' colspan='7'>".&mt($type)."</td></tr>".
- $output{$type};
+ unless ($output{$type} eq '') {
+ if ($context eq 'domain') {
+ $output{$type} = '<tr class="LC_info_row">'.
+ "<td align='center' colspan='7'>".&mt($type)."</td></tr>".
+ $output{$type};
+ }
$rolesdisplay = 1;
}
}
@@ -2636,17 +2637,13 @@
ENDJS
$outcome .= '<h3>'.$lt{'ld'}.'</h3>'.
- &Apache::loncommon::start_data_table().
- &Apache::loncommon::start_data_table_row().
- '<td>'.&mt('Internally authenticated').'<br />'.&mt("Change user's password?").
+ '<div>'.&mt('Internally authenticated').'<br />'.&mt("Change user's password?").
'<label><input type="radio" name="newintpwd" value="0" checked="checked" onclick="togglePwd(this.form);" />'.
&mt('No').'</label>'.(' 'x2).
'<label><input type="radio" name="newintpwd" value="1" onclick="togglePwd(this.form);" />'.&mt('Yes').'</label>'.
'<div id="LC_ownersetpwd" style="display:none">'.
' '.&mt('Password').' <input type="password" size="15" name="intarg" value="" />'.
- '<label><input type="checkbox" name="visible" onclick="if (this.checked) { this.form.intarg.type='."'text'".' } else { this.form.intarg.type='."'password'".' }" />'.&mt('Visible input').'</label></div></td>'.
- &Apache::loncommon::end_data_table_row().
- &Apache::loncommon::end_data_table();
+ '<label><input type="checkbox" name="visible" onclick="if (this.checked) { this.form.intarg.type='."'text'".' } else { this.form.intarg.type='."'password'".' }" />'.&mt('Visible input').'</label></div></div>';
}
if (&Apache::lonnet::allowed('udp',$ccdomain)) {
# Current user has rights to view domain preferences for user's domain
@@ -2669,11 +2666,7 @@
$result = &mt('Currently LTI authenticated.');
}
$outcome = '<h3>'.$lt{'ld'}.'</h3>'.
- &Apache::loncommon::start_data_table().
- &Apache::loncommon::start_data_table_row().
- '<td>'.$result.'</td>'.
- &Apache::loncommon::end_data_table_row()."\n".
- &Apache::loncommon::end_data_table();
+ '<div>'.$result.'</div>';
} elsif (&Apache::lonnet::allowed('mau',$env{'request.role.domain'})) {
my %lt=&Apache::lonlocal::texthash(
'ccld' => "Change Current Login Data",
@@ -2945,7 +2938,10 @@
if ($item eq 'generation') {
$rowtitle = $genhelp.$rowtitle;
}
- my $row = &Apache::lonhtmlcommon::row_title('<label for="userinfo_'.$item.'">'.$rowtitle.'</label>',undef,'LC_oddrow_value')."\n";
+ unless ((!$newuser) && (!$canmodify{$item})) {
+ $rowtitle = '<label for="userinfo_'.$item.'">'.$rowtitle.'</label>';
+ }
+ my $row = &Apache::lonhtmlcommon::row_title($rowtitle,undef,'LC_oddrow_value')."\n";
if ($newuser) {
if (ref($inst_results) eq 'HASH') {
if ($inst_results->{$item} ne '') {
@@ -3150,7 +3146,7 @@
my $end = '</span><br /><br />';
my $rtnlink = '<a href="javascript:backPage(document.userupdate,'.
"'$env{'form.prevphase'}','modify')".'" />'.
- &mt('Return to previous page').'</a>');
+ &mt('Return to previous page').'</a>';
my $now = time;
my $title;
if (exists($env{'form.makeuser'})) {
@@ -3274,9 +3270,9 @@
return;
}
- $r->print('<h3>'.&mt('User [_1] in domain [_2]',
+ $r->print('<h2 class="LC_heading_2">'.&mt('User [_1] in domain [_2]',
$env{'form.ccuname'}.' ('.&Apache::loncommon::plainname($env{'form.ccuname'},
- $env{'form.ccdomain'}).')', $env{'form.ccdomain'}).'</h3>');
+ $env{'form.ccdomain'}).')', $env{'form.ccdomain'}).'</h2>');
my %prog_state = &Apache::lonhtmlcommon::Create_PrgWin($r,2);
my (%alerts,%rulematch,%inst_results,%curr_rules);
@@ -6337,7 +6333,7 @@
$crstype,$showcredits));
} else {
$r->print(&header(undef,{'no_nav_bar' => 1}).
- '<span class="LC_error">'.&mt('You do not have permission to modify dates or sections for users').'</span>');
+ '<span class="LC_error">'.&mt('You do not have permission to modify dates or sections for users').'</span>');
}
} elsif ($env{'form.action'} eq 'selfenroll') {
my %currsettings;
@@ -6368,7 +6364,7 @@
$args = { bread_crumbs => $brcrum,
bread_crumbs_component => 'Configure Self-enrollment'};
$r->print(&header(undef,$args));
- $r->print('<h3>'.&mt('Self-enrollment with a student role').'</h3>'."\n");
+ $r->print('<h2 class="LC_heading_2">'.&mt('Self-enrollment with a student role').'</h2>'."\n");
&print_selfenroll_menu($r,'course',$cid,$cdom,$cnum,\%currsettings);
} elsif ($env{'form.state'} eq 'done') {
push (@{$brcrum},
@@ -6377,7 +6373,7 @@
$args = { bread_crumbs => $brcrum,
bread_crumbs_component => 'Self-enrollment result'};
$r->print(&header(undef,$args));
- $r->print('<h3>'.&mt('Self-enrollment with a student role').'</h3>'."\n");
+ $r->print('<h2 class="LC_heading_2">'.&mt('Self-enrollment with a student role').'</h2>'."\n");
&update_selfenroll_config($r,$cid,$cdom,$cnum,$context,$crstype,\%currsettings);
}
} elsif ($permission->{selfenrollview}) {
@@ -6388,7 +6384,7 @@
$args = { bread_crumbs => $brcrum,
bread_crumbs_component => 'Self-enrollment Settings'};
$r->print(&header(undef,$args));
- $r->print('<h3>'.&mt('Self-enrollment with a student role').'</h3>'."\n");
+ $r->print('<h2 class="LC_heading_2">'.&mt('Self-enrollment with a student role').'</h2>'."\n");
&print_selfenroll_menu($r,'course',$cid,$cdom,$cnum,\%currsettings,'',1);
} else {
$r->print(&header(undef,{'no_nav_bar' => 1}).
@@ -6466,7 +6462,7 @@
}
} else {
$r->print(&header(undef,{'no_nav_bar' => 1}).
- '<span class="LC_error">'.&mt('You do not have permission to view queued requests from other domains for assignment of roles to users from this domain.').'</span>');
+ '<span class="LC_error">'.&mt('You do not have permission to view queued requests from other domains for assignment of roles to users from this domain.').'</span>');
}
} elsif ($env{'form.action'} eq 'camanagers') {
if (($permission->{cusr}) && ($context eq 'author')) {
@@ -6500,6 +6496,7 @@
my $args = { 'bread_crumbs' => $brcrum };
$r->print(&Apache::loncommon::start_page('Configure co-author listing',undef,
$args).
+ "\n".'<div class="LC_landmark" role="main" id="LC_main_content">'."\n".
&Apache::lonviewcoauthors::edit_settings($audom,$auname,$role,
'/adm/createuser'));
} else {
@@ -6510,6 +6507,7 @@
my $args = { 'bread_crumbs' => $brcrum };
$r->print(&Apache::loncommon::start_page('Coauthor-viewable list',undef,
$args));
+ $r->print("\n".'<div class="LC_landmark" role="main" id="LC_main_content">');
my %viewsettings =
&Apache::lonviewcoauthors::retrieve_view_settings($auname,$audom,$role);
if ($viewsettings{'show'} eq 'none') {
@@ -6536,6 +6534,7 @@
my $args = { 'bread_crumbs' => $brcrum };
$r->print(&Apache::loncommon::start_page('Coauthor-viewable list',undef,
$args));
+ $r->print("\n".'<div class="LC_landmark" role="main" id="LC_main_content">');
my %viewsettings =
&Apache::lonviewcoauthors::retrieve_view_settings($auname,$audom,$role);
if ($viewsettings{'show'} eq 'none') {
@@ -7375,8 +7374,7 @@
'// <![CDATA['."\n".
$setsec_js."\n".$selfenroll_js."\n".
'// ]]>'."\n".
- '</script>'."\n".
- '<h3>'.$lt->{'selfenroll'}.'</h3>'."\n";
+ '</script>'."\n";
my $visactions = &cat_visibility($cdom);
my ($cathash,%cattype);
my %domconfig = &Apache::lonnet::get_dom('configuration',['coursecategories'],$cdom);
@@ -7488,25 +7486,21 @@
my $showdomdesc = 1;
my $includeempty = 1;
my $num = 0;
- $output .= &Apache::loncommon::start_data_table().
- &Apache::loncommon::start_data_table_row()
- .'<td colspan="2"><span class="LC_nobreak"><label>'
+ $output .= '<div><fieldset style="display:inline">'
.&mt('Any user in any domain:')
- .' <input type="radio" name="selfenroll_all" value="1" ';
+ .' <label><input type="radio" name="selfenroll_all" value="1" ';
if ($curr_types eq '*') {
$output .= ' checked="checked" ';
}
$output .= 'onchange="javascript:update_types('.
"'selfenroll_all'".');"'.$disabled.' />'.&mt('Yes').'</label>'.
- ' <input type="radio" name="selfenroll_all" value="0" ';
+ ' <label><input type="radio" name="selfenroll_all" value="0" ';
if ($curr_types ne '*') {
$output .= ' checked="checked" ';
}
$output .= ' onchange="javascript:update_types('.
- "'selfenroll_all'".');"'.$disabled.' />'.&mt('No').'</label></td>'.
- &Apache::loncommon::end_data_table_row().
- &Apache::loncommon::end_data_table().
- &mt('Or').'<br />'.
+ "'selfenroll_all'".');"'.$disabled.' />'.&mt('No').'</label></fieldset></div>'.
+ '<div>'.&mt('Or').'</div><br />'.
&Apache::loncommon::start_data_table();
my %currdoms;
if ($curr_types eq '') {
@@ -7542,9 +7536,11 @@
}
my ($trusted,$untrusted) = &Apache::lonnet::trusted_domains('enroll',$cdom);
$output .= &Apache::loncommon::start_data_table_row()
- .'<td colspan="2"><span class="LC_nobreak">'.$add_domtitle.'</span><br />'
+ .'<td colspan="2"><span class="LC_nobreak">'
+ .'<label for="selfenroll_newdom">'.$add_domtitle.'</label></span><br />'
.&Apache::loncommon::select_dom_form('','selfenroll_newdom',
- $includeempty,$showdomdesc,'',$trusted,$untrusted,$readonly)
+ $includeempty,$showdomdesc,'',
+ $trusted,$untrusted,$readonly,'selfenroll_newdom')
.'<input type="hidden" name="selfenroll_types_total" value="'.$num.'" />'
.'</td>'.&Apache::loncommon::end_data_table_row()
.&Apache::loncommon::end_data_table();
@@ -7570,11 +7566,11 @@
$regon = '';
$regoff = ' checked="checked" ';
}
- $output .= '<label>'.
+ $output .= '<fieldset class="LC_borderless"><label>'.
'<input type="radio" name="selfenroll_registered" value="1"'.$regon.$disabled.' />'.
&mt('Yes').'</label> <label>'.
'<input type="radio" name="selfenroll_registered" value="0"'.$regoff.$disabled.' />'.
- &mt('No').'</label>';
+ &mt('No').'</label></fieldset>';
} elsif ($item eq 'enroll_dates') {
my ($starttime,$endtime);
if (ref($currsettings) eq 'HASH') {
@@ -7646,14 +7642,20 @@
$output .= '<br />'.&mt('(Set by Domain Coordinator)');
next;
}
+ my $arialabel = &mt('Existing sections');
my $sections_select =
- &Apache::lonuserutils::course_sections(\%sections_count,'st',$currsec,$disabled);
+ &Apache::lonuserutils::course_sections(\%sections_count,'st',$currsec,$disabled,
+ $arialabel);
$output .= '<table class="LC_createuser">'."\n".
+ '<tr class="LC_visually_hidden">'.
+ '<th>'.&mt('Choose an existing section').'</th>'.
+ '<th>'.&mt('Instantiate a new section').'</th>'."\n".
+ '</tr>'."\n".
'<tr class="LC_section_row">'."\n".
'<td align="center">'.&mt('Existing sections')."\n".
'<br />'.$sections_select.'</td><td align="center">'.
- &mt('New section').'<br />'."\n".
- '<input type="text" name="newsec" size="15" value="'.$newsecval.'"'.$disabled.' />'."\n".
+ '<label>'.&mt('New section').'<br />'."\n".
+ '<input type="text" name="newsec" size="15" value="'.$newsecval.'"'.$disabled.' /></label>'."\n".
'<input type="hidden" name="sections" value="" />'."\n".
'</td></tr></table>'."\n";
} elsif ($item eq 'approval') {
@@ -7672,6 +7674,7 @@
next;
}
$appchecked{$currapproval} = ' checked="checked"';
+ $output .= '<fieldset class="LC_borderless"><legend></legend>';
for my $i (0..2) {
$output .= '<label>'.
'<input type="radio" name="selfenroll_approval" value="'.$i.'"'.
@@ -7698,12 +7701,10 @@
if (@ccs) {
my $style;
unless ($currapproval) {
- $style = ' style="display: none;"';
+ $style = ' style="display: none;"';
}
- $output .= '<br /><div id="notified"'.$style.'>'.
- &mt('Personnel to be notified when an enrollment request needs approval, or has been approved:').' '.
- &Apache::loncommon::start_data_table().
- &Apache::loncommon::start_data_table_row();
+ $output .= '</fieldset><br /><div id="notified"'.$style.'>'.
+ &mt('Personnel to be notified when an enrollment request needs approval, or has been approved:').'<br />';
my $count = 0;
my $numcols = 4;
foreach my $cc (sort(@ccs)) {
@@ -7712,26 +7713,13 @@
if ($notified{$cc}) {
$notifyon = ' checked="checked" ';
}
- if ($count && !$count%$numcols) {
- $output .= &Apache::loncommon::end_data_table_row().
- &Apache::loncommon::start_data_table_row()
- }
- $output .= '<td><span class="LC_nobreak"><label>'.
+ $output .= '<span class="LC_nobreak"><label>'.
'<input type="checkbox" name="selfenroll_notify"'.$notifyon.' value="'.$cc.'"'.$disabled.' />'.
&Apache::loncommon::plainname($ccuname,$ccudom).
- '</label></span></td>';
+ '</label></span> ';
$count ++;
}
- my $rem = $count%$numcols;
- if ($rem) {
- my $emptycols = $numcols - $rem;
- for (my $i=0; $i<$emptycols; $i++) {
- $output .= '<td> </td>';
- }
- }
- $output .= &Apache::loncommon::end_data_table_row().
- &Apache::loncommon::end_data_table().
- '</div>';
+ $output .= '</div>';
}
} elsif ($item eq 'limit') {
my ($crslimit,$selflimit,$nolimit,$currlim,$currcap);
@@ -7766,17 +7754,17 @@
$selflimit = ' ';
$nolimit = ' checked="checked" ';
}
- $output .= '<table><tr><td><label>'.
+ $output .= '<fieldset class="LC_borderless"><div style="padding: 0 2px 0 0"><label>'.
'<input type="radio" name="selfenroll_limit" value="none"'.$nolimit.$disabled.'/>'.
- &mt('No limit').'</label></td><td><label>'.
+ &mt('No limit').'</label> <label>'.
'<input type="radio" name="selfenroll_limit" value="allstudents"'.$crslimit.$disabled.'/>'.
- &mt('Limit by total students').'</label></td><td><label>'.
+ &mt('Limit by total students').'</label> <label>'.
'<input type="radio" name="selfenroll_limit" value="selfenrolled"'.$selflimit.$disabled.'/>'.
&mt('Limit by total self-enrolled students').
- '</td></tr><tr>'.
- '<td> </td><td colspan="2"><span class="LC_nobreak">'.
- (' 'x3).&mt('Maximum number allowed: ').
- '<input type="text" name="selfenroll_cap" size = "5" value="'.$currcap.'"'.$disabled.' /></td></tr></table>';
+ '</div>'.
+ '<div style="margin-left: 40px"><span class="LC_nobreak">'.
+ '<label>'.&mt('Maximum number allowed: ').
+ '<input type="text" name="selfenroll_cap" size = "5" value="'.$currcap.'"'.$disabled.' /></label></div></fieldset>';
}
$output .= &Apache::lonhtmlcommon::row_closure(1);
}
@@ -7975,8 +7963,8 @@
."'selfenroll_activate','$num'".');" />'
.&mt('Activate').'</label></span></td>';
my @currinsttypes;
- $output .= '<td>'.&mt('User types:').'<br />'
- .&selfenroll_inst_types($num,$newdom,\@currinsttypes).'</td>'
+ $output .= '<td><fieldset class="LC_borderless">'.&mt('User types:').'<br />'
+ .&selfenroll_inst_types($num,$newdom,\@currinsttypes).'</fieldset></td>'
.&Apache::loncommon::end_data_table_row();
}
return $output;
@@ -7997,14 +7985,14 @@
if (keys(%{$usertypes}) > 0) {
$othervalue = 'other';
}
- $output .= '<table><tr>';
+ $output .= '<div>';
foreach my $type (@{$types}) {
if (($count > 0) && ($count%$numinrow == 0)) {
- $output .= '</tr><tr>';
+ $output .= '</div><div>';
}
if (defined($usertypes->{$type})) {
my $esc_type = &escape($type);
- $output .= '<td><span class="LC_nobreak"><label><input type = "checkbox" value="'.
+ $output .= '<span class="LC_nobreak"><label><input type = "checkbox" value="'.
$esc_type.'" ';
if (ref($currinsttypes) eq 'ARRAY') {
if (@{$currinsttypes} > 0) {
@@ -8017,14 +8005,14 @@
$output .= 'checked="checked"';
}
}
- $output .= ' name="selfenroll_types_'.$num.'"'.$disabled.' />'.$usertypes->{$type}.'</label></span></td>';
+ $output .= ' name="selfenroll_types_'.$num.'"'.$disabled.' />'.$usertypes->{$type}.'</label></span> ';
}
$count ++;
}
if (($count > 0) && ($count%$numinrow == 0)) {
- $output .= '</tr><tr>';
+ $output .= '</div><div>';
}
- $output .= '<td><span class="LC_nobreak"><label><input type = "checkbox" value="'.$othervalue.'"';
+ $output .= '<span class="LC_nobreak"><label><input type = "checkbox" value="'.$othervalue.'"';
if (ref($currinsttypes) eq 'ARRAY') {
if (@{$currinsttypes} > 0) {
if (grep(/^any$/,@{$currinsttypes})) {
@@ -8040,7 +8028,7 @@
} else {
$output .= ' checked="checked"';
}
- $output .= ' name="selfenroll_types_'.$num.'"'.$disabled.' />'.$othertitle.'</label></span></td></tr></table>';
+ $output .= ' name="selfenroll_types_'.$num.'"'.$disabled.' />'.$othertitle.'</label></span></div>';
}
return $output;
}
@@ -8176,7 +8164,7 @@
# Table Header
my $tableheader =
&Apache::loncommon::start_data_table_header_row()
- .'<th> </th>'
+ .'<th>#</th>'
.'<th>'.&mt('When').'</th>'
.'<th>'.&mt('Who made the change').'</th>'
.'<th>'.&mt('Changed User').'</th>'
@@ -8730,11 +8718,12 @@
sub role_display_filter {
my ($context,$formname,$cdom,$cnum,$curr,$version,$crstype) = @_;
my $nolink = 1;
- my $output = '<table><tr><td valign="top">'.
- '<span class="LC_nobreak"><b>'.&mt('Changes/page:').'</b></span><br />'.
- &Apache::lonmeta::selectbox('show',$curr->{'show'},'','',undef,
+ my $output = '<div class="LC_left_float" style="padding: 0; vertical-align: top">'.
+ '<span class="LC_nobreak"><b><label for="show">'.
+ &mt('Changes/page').'</label>:</b></span><br />'.
+ &Apache::lonmeta::selectbox('show',$curr->{'show'},'','show',undef,
(&mt('all'),5,10,20,50,100,1000,10000)).
- '</td><td> </td>';
+ '</div>';
my $startform =
&Apache::lonhtmlcommon::date_setter($formname,'rolelog_start_date',
$curr->{'rolelog_start_date'},undef,
@@ -8744,15 +8733,22 @@
$curr->{'rolelog_end_date'},undef,
undef,undef,undef,undef,undef,undef,$nolink);
my %lt = &rolechg_contexts($context,$crstype);
- $output .= '<td valign="top"><b>'.&mt('Window during which changes occurred:').'</b><br />'.
- '<table><tr><td>'.&mt('After:').
- '</td><td>'.$startform.'</td></tr>'.
- '<tr><td>'.&mt('Before:').'</td>'.
- '<td>'.$endform.'</td></tr></table>'.
- '</td>'.
- '<td> </td>'.
- '<td valign="top"><b>'.&mt('Role:').'</b><br />'.
- '<select name="role"><option value="any"';
+ $output .= '<div class="LC_left_float" style="padding: 0 2px 0 0; vertical-align: top">'.
+ '<b>'.&mt('Window during which changes occurred:').'</b>'.
+ '<div style="padding-top: 0; margin-top:0; vertical-align: top" role="grid" class="LC_grid">'.
+ '<div role="row" class="LC_grid_row">'.
+ '<div role="gridcell" class="LC_grid_cell">'.
+ &mt('After:').'</div>'.
+ '<div role="gridcell" class="LC_grid_cell">'.$startform.'</div>'.
+ '</div>'.
+ '<div role="row" class="LC_grid_row">'.
+ '<div role="gridcell" class="LC_grid_cell">'.
+ &mt('Before:').'</div>'.
+ '<div role="gridcell" class="LC_grid_cell">'.$endform.'</div>'.
+ '</div></div></div>'.
+ '<div class="LC_left_float" style="padding: 0; vertical-align: top">'.
+ '<b><label for="chgrole">'.&mt('Role').'</label>:</b><br />'.
+ '<select name="role" id="chgrole"><option value="any"';
if ($curr->{'role'} eq 'any') {
$output .= ' selected="selected"';
}
@@ -8771,10 +8767,10 @@
}
$output .= ' <option value="'.$role.'"'.$selstr.'>'.$plrole.'</option>';
}
- $output .= '</select></td>'.
- '<td> </td>'.
- '<td valign="top"><b>'.
- &mt('Context:').'</b><br /><select name="chgcontext">';
+ $output .= '</select></div>'.
+ '<div class="LC_left_float" style="padding: 0 2px 0 0; vertical-align: top">'.
+ '<b><label for="chgcontext">'.&mt('Context').'</label>:</b><br />'.
+ '<select name="chgcontext" id="chgcontext">';
my @posscontexts;
if ($context eq 'course') {
@posscontexts = ('any','automated','updatenow','createcourse','course','domain','selfenroll','requestcourses','chgtype','ltienroll');
@@ -8797,10 +8793,10 @@
}
my @possapprovals = ('any','none','domain','user');
my %apptxt = &approval_types();
- $output .= '</select></td>'.
- '<td> </td>'.
- '<td valign="top"><b>'.
- &mt('Approvals:').'</b><br /><select name="approvals">';
+ $output .= '</select></div>'.
+ '<div class="LC_left_float" style="padding: 0; vertical-align: top">'.
+ '<b><label for="approvals">'.&mt('Approvals').'</label>:</b><br />'.
+ '<select name="approvals" id="approvals">';
foreach my $approval (@possapprovals) {
my $selstr = '';
if ($curr->{'approvals'} eq $approval) {
@@ -8808,10 +8804,10 @@
}
$output .= '<option value="'.$approval.'"'.$selstr.'>'.$apptxt{$approval}.'</option>';
}
- $output .= '</select></td></tr></table>';
+ $output .= '</select></div>';
# Update Display button
- $output .= '<p>'
+ $output .= '<div style="padding:0;clear:both;margin:0;border:0"></div><p>'
.'<input type="submit" value="'.&mt('Update Display').'" />'
.'</p>';
@@ -9600,7 +9596,7 @@
# print page header
$r->print(&header('',$args));
unless ((ref($permission) eq 'HASH') && ($permission->{'owner'})) {
- $r->print('<p class="LC_error">'.&mt('You do not have permission to change helpdesk access.').'</p>');
+ $r->print('<p class="LC_error">'.&mt('You do not have permission to change helpdesk access.').'</p></div>');
return;
}
my @accesstypes = ('all','dh','da','none','status','inc','exc');
@@ -10471,7 +10467,7 @@
my %customroles=&Apache::lonuserutils::my_custom_roles();
my %lt=&Apache::lonlocal::texthash(
'exs' => "Existing sections",
- 'new' => "Define new section",
+ 'new' => "Define new",
'ssd' => "Set Start Date",
'sed' => "Set End Date",
'crl' => "Course Level",
@@ -10481,7 +10477,9 @@
'grs' => "Section",
'crd' => "Credits",
'sta' => "Start",
- 'end' => "End"
+ 'end' => "End",
+ 'cho' => "Choose an existing section",
+ 'ins' => "Instantiate a new section",
);
foreach my $protectedcourse (sort(keys(%{$inccourses}))) {
@@ -10554,16 +10552,18 @@
my ($protectedcourse,$role,$area,$domain,$plrole,$sections_count,
$lt,$showcredits,$defaultcredits,$crstype) = @_;
my $creditem;
+ my $actlabel = &mt('Activate [_1] role for course [_2]',$plrole,$protectedcourse);
my $row = &Apache::loncommon::start_data_table_row().
' <td><input type="checkbox" name="act_'.
- $protectedcourse.'_'.$role.'" /></td>'."\n".
+ $protectedcourse.'_'.$role.'" aria-label="'.$actlabel.'" /></td>'."\n".
' <td>'.$plrole.'</td>'."\n".
' <td>'.$area.'<br />Domain: '.$domain.'</td>'."\n";
if ($showcredits) {
if (($role eq 'st') && ($crstype eq 'Course')) {
- $row .=
+ my $crlabel = &mt('Credits to assign to student role for course [_1]',$protectedcourse);
+ $row .=
'<td><input type="text" name="credits_'.$protectedcourse.'_'.
- $role.'" size="3" value="'.$defaultcredits.'" /></td>';
+ $role.'" size="3" value="'.$defaultcredits.'" aria-label="'.$crlabel.'" /></td>';
} else {
$row .= '<td> </td>';
}
@@ -10577,17 +10577,23 @@
$env{'request.course.sec'}.'</td>';
} else {
if (ref($sections_count) eq 'HASH') {
- my $currsec =
+ my $arialabel = &mt('Existing sections for [_1] in [_2]',
+ $plrole,$area);
+ my $currsec =
&Apache::lonuserutils::course_sections($sections_count,
- $protectedcourse.'_'.$role);
- $row .= '<td><table class="LC_createuser">'."\n".
+ $protectedcourse.'_'.$role,'','',$arialabel);
+ $row .= '<td style="padding-top: 0; margin-top: 0" valign="top">'.
+ '<table class="LC_createuser">'."\n".
+ '<tr class="LC_visually_hidden">'.
+ '<th>'.$lt->{'cho'}.'</th>'.
+ '<th>'.$lt->{'ins'}.'</th>'."\n".
+ '</tr>'."\n".
'<tr class="LC_section_row">'."\n".
' <td valign="top">'.$lt->{'exs'}.'<br />'.
$currsec.'</td>'."\n".
- ' <td> </td>'."\n".
- ' <td valign="top"> '.$lt->{'new'}.'<br />'.
+ ' <td valign="top"> <label>'.$lt->{'new'}.'<br />'.
'<input type="text" name="newsec_'.$protectedcourse.'_'.$role.
- '" value="" />'.
+ '" value="" size="6" /></label>'.
'<input type="hidden" '.
'name="sec_'.$protectedcourse.'_'.$role.'" /></td>'."\n".
'</tr></table></td>'."\n";
Index: loncom/interface/lonuserutils.pm
diff -u loncom/interface/lonuserutils.pm:1.225 loncom/interface/lonuserutils.pm:1.226
--- loncom/interface/lonuserutils.pm:1.225 Mon Jan 13 01:00:58 2025
+++ loncom/interface/lonuserutils.pm Mon Dec 15 19:17:39 2025
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Utility functions for managing LON-CAPA user accounts
#
-# $Id: lonuserutils.pm,v 1.225 2025/01/13 01:00:58 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.226 2025/12/15 19:17:39 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -878,7 +878,8 @@
$select_menus{$roletype}->{'select2'}->{'Any'} = &mt('Any');
}
my $result = &Apache::loncommon::linked_select_forms
- ('studentform',(' 'x3).&mt('Role: '),$env{'form.roletype'},
+ ('studentform',(' 'x3).'<label for="showrole">'.
+ &mt('Role').'</label>: ',$env{'form.roletype'},
'roletype','showrole',\%select_menus,
['domain','author','course','community'],$onchangefirst,
$onchangesecond);
@@ -934,7 +935,7 @@
$groupslist,$crstype);
my $checked=(($env{'form.noFirstLine'})?' checked="checked"':'');
$r->print(
- '<h3>'.&mt('Identify fields in uploaded list')."</h3>\n".
+ '<h2 class="LC_heading_2">'.&mt('Identify fields in uploaded list')."</h2>\n".
'<p class="LC_info">'.
&mt('Total number of records found in file: [_1]'
,'<b>'.$distotal.'</b>').
@@ -1496,7 +1497,7 @@
$Str .= &hidden_input('nfields',$i);
$Str .= &hidden_input('keyfields',$keyfields);
- $Str .= '<h3>'.&mt('Options').'</h3>'
+ $Str .= '<h2 class="LC_heading_2">'.&mt('Options').'</h2>'
.&Apache::lonhtmlcommon::start_pick_box();
$Str .= &Apache::lonhtmlcommon::row_title(&mt('Login Type'));
@@ -1540,12 +1541,13 @@
} elsif ($context eq 'author') {
($trusted,$untrusted) = &Apache::lonnet::trusted_domains('othcoau',$defdom);
}
- $Str .= &Apache::lonhtmlcommon::row_title(&mt('Default domain'))
- .&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1,undef,$trusted,$untrusted)
+ $Str .= &Apache::lonhtmlcommon::row_title('<label for="defaultdomain">'.&mt('Default domain').'</label>')
+ .&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1,undef,
+ $trusted,$untrusted,'','defaultdomain')
.&Apache::lonhtmlcommon::row_closure();
$Str .= &Apache::lonhtmlcommon::row_title(&mt('Starting and Ending Dates'))
- ."<p>\n".$date_table."</p>\n"
+ ."\n".$date_table."\n"
.&Apache::lonhtmlcommon::row_closure();
if ($context eq 'domain') {
@@ -1981,7 +1983,7 @@
'new' => "New section",
'crd' => "Credits",
);
- $options = '<select name="defaultrole">'."\n".
+ $options = '<select name="defaultrole" id="defaultrole">'."\n".
' <option value="">'.&mt('Please select').'</option>'."\n";
if ($context eq 'course') {
$options .= &default_course_roles($context,$checkpriv,$crstype,%customroles);
@@ -2206,7 +2208,7 @@
}
my $onchange = "javascript:updateCols('Status');";
my $status_select = &Apache::lonhtmlcommon::StatusOptions
- ($env{'form.Status'},undef,undef,$onchange);
+ ($env{'form.Status'},undef,undef,$onchange,undef,'status');
if ($env{'form.showrole'} eq '') {
if ($context eq 'course') {
@@ -2240,7 +2242,7 @@
my %lt=&Apache::lonlocal::texthash('csv' => "CSV",
'excel' => "Excel",
'html' => 'HTML');
- my $output_selector = '<select size="1" name="output" onchange="javascript:updateCols('."'output'".');" >';
+ my $output_selector = '<select size="1" name="output" id="output" onchange="javascript:updateCols('."'output'".');" >';
foreach my $outputformat ('html','csv','excel') {
my $option = '<option value="'.$outputformat.'"';
if ($outputformat eq $env{'form.output'}) {
@@ -2250,12 +2252,12 @@
$output_selector .= "\n".$option;
}
$output_selector .= '</select>';
- $r->print('<span class="LC_nobreak">'
- .&mt('Output Format: [_1]',$output_selector)
+ $r->print('<span class="LC_nobreak"><label for="output">'
+ .&mt('Output Format').'</label>: '.$output_selector
.'</span>'.(' 'x3));
}
- $r->print('<span class="LC_nobreak">'
- .&mt('User Status: [_1]',$status_select)
+ $r->print('<span class="LC_nobreak"><label for="status">'
+ .&mt('User Status').'</label>: '.$status_select
.'</span>'.(' 'x3)."\n");
my $roleselected = '';
if ($env{'form.showrole'} eq 'Any') {
@@ -2523,11 +2525,11 @@
my ($role_select);
if ($context eq 'domain') {
$role_select = &domain_roles_select();
- $output = '<span class="LC_nobreak">'
- .&mt('Role Type: [_1]',$role_select)
+ $output = '<span class="LC_nobreak"><label for="roletype">'
+ .&mt('Role Type').'</label>: '.$role_select
.'</span>';
} else {
- $role_select = '<select name="showrole" onchange="javascript:updateCols('."'showrole'".');">'."\n".
+ $role_select = '<select name="showrole" id="rolefilter" onchange="javascript:updateCols('."'showrole'".');">'."\n".
'<option value="Any" '.$roleselected.'>'.
&mt('Any role').'</option>';
my ($roletype,$crstype);
@@ -2554,8 +2556,8 @@
$role_select .= '<option value="'.$role.'"'.$roleselected.'>'.$plrole.'</option>';
}
$role_select .= '</select>';
- $output = '<span class="LC_nobreak">'
- .&mt('Role: [_1]',$role_select)
+ $output = '<span class="LC_nobreak"><label for="rolefilter">'
+ .&mt('Role').'</label>: '.$role_select
.'</span>';
}
return $output;
@@ -2737,15 +2739,15 @@
'<input type="button" onclick="javascript:checkAll(document.'.$formname.'.showcol);" value="'.&mt('check all').'" />'.
(' 'x3).
'<input type="button" onclick="javascript:uncheckAll(document.'.$formname.'.showcol);" value="'.&mt('uncheck all').'" />'.
- '</span><table>';
+ '</span><div role="grid" class="LC_grid">';
for (my $i=0; $i<$numposs; $i++) {
my $rem = $i%($numinrow);
if ($rem == 0) {
if ($i > 0) {
- $output .= '</tr>';
+ $output .= '</div>';
}
- $output .= '<tr>';
+ $output .= '<div role="row" class="LC_grid_row">';
}
my $checked;
if ($env{'form.phase'} eq '') {
@@ -2761,16 +2763,7 @@
} elsif ($disabledchk{$cols[$i]}) {
$checked = ' disabled="disabled"';
}
- if ($i == $numposs-1) {
- my $colsleft = $numinrow-$rem;
- if ($colsleft > 1) {
- $output .= '<td colspan="'.$colsleft.'">';
- } else {
- $output .= '<td>';
- }
- } else {
- $output .= '<td>';
- }
+ $output .= '<div role="gridcell" class="LC_grid_cell">';
my $style;
if ($cols[$i] eq 'extent') {
if (($env{'form.roletype'} eq 'domain') || ($env{'form.roletype'} eq '')) {
@@ -2784,9 +2777,9 @@
$output .= '<span id="show'.$cols[$i].'"'.$style.'><label>'.
'<input id="showcol'.$cols[$i].'" type="checkbox" name="showcol" value="'.$cols[$i].'"'.$checked.' /><span id="showcoltext'.$cols[$i].'">'.
$lt{$cols[$i]}.'</span>'.
- '</label></span></td>';
+ '</label></span></div>';
}
- $output .= '</tr></table></fieldset>';
+ $output .= '</div></div></fieldset>';
return $output;
}
@@ -3394,8 +3387,8 @@
}
}
}
- $output .= '<div class="LC_left_float"><fieldset><legend>'.$lt{'link'}.'</legend>'.
- '<table><tr>';
+ $output .= '<div class="LC_left_float"><fieldset><legend>'.$lt{'link'}.'</legend>'
+ .'<div class="LC_floatleft" style="text-align: top">';
my @linkdests = ('aboutme');
if ($permission->{'cusr'}) {
unshift (@linkdests,'modify');
@@ -3411,7 +3404,6 @@
push(@linkdests,'activity');
}
}
- $output .= '<td>';
my $usernamelink = $env{'form.usernamelink'};
if ($usernamelink eq '') {
$usernamelink = 'aboutme';
@@ -3428,10 +3420,11 @@
$checkwin = ' checked="checked"';
}
$output .=
- '</td><td valign="top" style="border-left: 1px solid;">'
- .'<span class="LC_nobreak"><label>'
+ '</div><div class="LC_floatleft" style="border-left: 0px; vertical-align: top;">'
+ .'<div class="LC_floatleft" style="border-left: 1px solid; margin: 0 0 0 10px; vertical-align: middle;">'
+ .'<br /><span class="LC_nobreak"> <label>'
.'<input type="checkbox" name="userwin" value="1"'.$checkwin.' />'.$lt{'owin'}
- .'</label></span></td></tr></table></fieldset></div>';
+ .'</label></span><br /><br /></div></fieldset></div>';
}
$output .= "\n".'<div style="padding:0;clear:both;margin:0;border:0"></div>'."\n".
&Apache::loncommon::start_data_table().
@@ -3441,9 +3434,9 @@
<th><a href=\"javascript:document.$formname.sortby.value='type';document.$formname.submit();\">$lt{'type'}</a></th>
";
} else {
- $output .= "\n".'<th> </th>'."\n";
+ $output .= "\n".'<th>#</th>'."\n";
if ($actionselect) {
- $output .= '<th class="LC_nobreak" valign="top">'.&mt('Select').'</th>'."\n";
+ $output .= '<th class="LC_nobreak" valign="top">'.&mt('select').'</th>'."\n";
}
}
foreach my $item (@cols) {
@@ -3874,7 +3867,7 @@
if ($showcheckbox) {
$r->print('<td><input type="checkbox" name="'.
'actionlist" value="'.
- &HTML::Entities::encode($checkval,'&<>"').'" />');
+ &HTML::Entities::encode($checkval,'&<>"').'" aria-label="'.&mt('select user for action').'" />');
foreach my $item ('start','end') {
$r->print('<input type="hidden" name="'.
&HTML::Entities::encode($checkval.'_'.$item,'&<>"').'"'.
@@ -4120,8 +4113,9 @@
delete => "Delete user roles",
reenable => "Re-enable expired user roles",
activate => "Make future user roles active now",
- chgdates => "Change starting/ending dates",
+ chgdates => "Change starting/ending dates",
chgsec => "Change section associated with user roles",
+ act => "Action to take for selected users",
);
# FIXME Add an option to change credits for student roles.
my ($output,$options,%choices);
@@ -4181,7 +4175,7 @@
}
}
if ($options) {
- $output = '<select name="bulkaction">'."\n".
+ $output = '<select name="bulkaction" aria-label="'.$lt{'act'}.'">'."\n".
'<option value="" selected="selected">'.
&mt('Please select').'</option>'."\n".$options."\n".'</select>';
if ($choices{'dates'}) {
@@ -4405,21 +4399,32 @@
my ($cdom,$cnum,$role,$rowtitle,$permission,$context,$mode,$crstype,
$showcredits,$credits) = @_;
my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum);
- my $sections_select .= &course_sections(\%sections_count,$role);
+ my $plrole = &Apache::lonnet::plaintext($role,$crstype);
+ my %coursedescription = &Apache::lonnet::coursedescription($cdom.'_'.$cnum);
+ my $arialabel = &mt('Existing sections for [_1] in [_2]',
+ $plrole,$coursedescription{'description'});
+ my $sections_select .= &course_sections(\%sections_count,$role,'','',$arialabel);
my $secbox = '<div>'.&Apache::lonhtmlcommon::start_pick_box()."\n";
if ($mode eq 'upload') {
my ($options,$cb_script,$coursepick) =
&default_role_selector($context,1,$crstype,$showcredits);
- $secbox .= &Apache::lonhtmlcommon::row_title(&mt('role'),'LC_oddrow_value').
+ $secbox .= &Apache::lonhtmlcommon::row_title('<label for="defaultrole">'.
+ &mt('role').'</label>',
+ 'LC_oddrow_value').
$options. &Apache::lonhtmlcommon::row_closure(1)."\n";
}
$secbox .= &Apache::lonhtmlcommon::row_title($rowtitle,'LC_oddrow_value')."\n";
if ($env{'request.course.sec'} eq '') {
- $secbox .= '<table class="LC_createuser"><tr class="LC_section_row">'."\n".
+ $secbox .= '<table class="LC_createuser">'.
+ '<tr class="LC_visually_hidden">'.
+ '<th>'.&mt('Choose an existing section').'</th>'.
+ '<th>'.&mt('Instantiate a new section').'</th>'."\n".
+ '</tr>'."\n".
+ '<tr class="LC_section_row">'."\n".
'<td align="center">'.&mt('Existing sections')."\n".
'<br />'.$sections_select.'</td><td align="center">'.
- &mt('New section').'<br />'."\n".
- '<input type="text" name="newsec" size="15" value="" />'."\n".
+ '<label>'.&mt('New section').'<br />'."\n".
+ '<input type="text" name="newsec" size="15" value="" /></label>'."\n".
'<input type="hidden" name="sections" value="" />'."\n".
'</td></tr></table>'."\n";
} else {
@@ -4854,7 +4859,7 @@
&mt("How do I create a CSV file from a spreadsheet"))
."</div>\n";
$str .= &Apache::lonhtmlcommon::start_pick_box()
- .&Apache::lonhtmlcommon::row_title(&mt('File'));
+ .&Apache::lonhtmlcommon::row_title('<label for="upfile">'.&mt('File').'</label>');
if (&Apache::lonlocal::current_language() ne 'en') {
if ($context eq 'course') {
$str .= '<p class="LC_info">'."\n"
@@ -6450,7 +6455,10 @@
my ($authnum,%can_assign) =
&Apache::loncommon::get_assignable_auth($dom);
if ($authnum) {
- $response = &Apache::loncommon::start_data_table();
+ $response = &Apache::loncommon::start_data_table().
+ &Apache::loncommon::start_data_table_header_row('LC_visually_hidden').
+ '<th>'.&mt('Authentication method').'</th>'.
+ &Apache::loncommon::end_data_table_row()."\n";
if (($can_assign{'krb4'}) || ($can_assign{'krb5'})) {
$response .= &Apache::loncommon::start_data_table_row().
'<td>'.$authformkrb.'</td>'.
@@ -6477,13 +6485,16 @@
}
sub course_sections {
- my ($sections_count,$role,$current_sec,$disabled) = @_;
+ my ($sections_count,$role,$current_sec,$disabled,$arialabel) = @_;
my $output = '';
my @sections = (sort {$a <=> $b} keys(%{$sections_count}));
my $numsec = scalar(@sections);
my $is_selected = ' selected="selected"';
+ if ($arialabel ne '') {
+ $arialabel = ' aria-label="'.$arialabel.'"';
+ }
if ($numsec <= 1) {
- $output = '<select name="currsec_'.$role.'"'.$disabled.'>'."\n".
+ $output = '<select name="currsec_'.$role.'"'.$disabled.$arialabel.'>'."\n".
' <option value="">'.&mt('Select').'</option>'."\n";
if ($current_sec eq 'none') {
$output .=
@@ -6506,7 +6517,7 @@
my $multiple = 4;
if (scalar(@sections) < 4) { $multiple = scalar(@sections); }
if ($role eq 'st') {
- $output .= $disabled.'>'."\n".
+ $output .= $disabled.$arialabel.'>'."\n".
' <option value="">'.&mt('Select').'</option>'."\n";
if ($current_sec eq 'none') {
$output .=
@@ -6516,7 +6527,7 @@
' <option value="">'.&mt('No section')."</option>\n";
}
} else {
- $output .= 'multiple="multiple" size="'.$multiple.'"'.$disabled.'>'."\n";
+ $output .= 'multiple="multiple" size="'.$multiple.'"'.$disabled.$arialabel.'>'."\n";
}
foreach my $sec (@sections) {
if ($current_sec eq $sec) {
More information about the LON-CAPA-cvs
mailing list