[LON-CAPA-cvs] cvs: loncom /interface loncoursegroups.pm
raeburn
raeburn at source.lon-capa.org
Tue Jan 20 11:52:44 EST 2026
raeburn Tue Jan 20 16:52:44 2026 EDT
Modified files:
/loncom/interface loncoursegroups.pm
Log:
- WCAG 2 compliance
- Include labels for form elements
- Replace use of <table> with <div> for layout
-------------- next part --------------
Index: loncom/interface/loncoursegroups.pm
diff -u loncom/interface/loncoursegroups.pm:1.135 loncom/interface/loncoursegroups.pm:1.136
--- loncom/interface/loncoursegroups.pm:1.135 Tue Jan 20 04:21:12 2026
+++ loncom/interface/loncoursegroups.pm Tue Jan 20 16:52:44 2026
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: loncoursegroups.pm,v 1.135 2026/01/20 04:21:12 raeburn Exp $
+# $Id: loncoursegroups.pm,v 1.136 2026/01/20 16:52:44 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -157,7 +157,8 @@
if ($manage_permission) {
$helpitem = 'Creating_Groups';
}
- $r->print(&Apache::lonhtmlcommon::breadcrumbs('Groups',$helpitem));
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Groups',$helpitem)."\n".
+ '<div class="LC_landmark" role="main" id="LC_main_content">'."\n");
&display_groups($r,$cdom,$cnum,$functions,$idx,$view_permission,
$manage_permission,$action,$state,$gpterm,$ucgpterm,
$crstype);
@@ -990,7 +991,8 @@
&Apache::lonhtmlcommon::add_breadcrumb(
{text=>"$trail{$action}{$state}"});
$r->print(&Apache::lonhtmlcommon::breadcrumbs
- ("Groups Manager","Creating_Groups"));
+ ("Groups Manager","Creating_Groups")."\n".
+ '<div class="LC_landmark" role="main" id="LC_main_content">'."\n");
&display_control($r,$cdom,$cnum,$action,$state,$page,
\%sectioncount,$groupname,$description,$functions,
\@tools,$toolprivs,$fixedprivs,$startdate,$enddate,
@@ -1018,7 +1020,8 @@
&Apache::lonhtmlcommon::add_breadcrumb(
{text=>"View $gpterm".'s'});
$r->print(&Apache::lonhtmlcommon::breadcrumbs
- ('Groups Manager'));
+ ('Groups Manager')."\n".
+ '<div class="LC_landmark" role="main" id="LC_main_content">'."\n");
&display_groups($r,$cdom,$cnum,$functions,$idx,$view_permission,
$manage_permission,$action,$state,$gpterm,$ucgpterm,
$crstype);
@@ -1530,7 +1533,6 @@
{'add_entries' => $loaditems,});
my $output = <<"END";
$start_page
-<div class="LC_landmark" role="main" id="LC_main_content">
<form method="post" name="$state" action="">
END
@@ -1568,9 +1570,9 @@
sub footer {
my $end_page = &Apache::loncommon::end_page();
return(<<ENDFOOT);
+ </div>
<input type="hidden" name="sortby" value="$env{'form.sortby'}" />
</form>
- </div>
$end_page
ENDFOOT
}
@@ -1714,23 +1716,23 @@
$r->print(&Apache::lonhtmlcommon::topic_bar($image,$lt{'gnde'}));
# Group Name
- $r->print(&Apache::lonhtmlcommon::start_pick_box()
- .&Apache::lonhtmlcommon::row_title($lt{'gnam'})
- );
+ $r->print(&Apache::lonhtmlcommon::start_pick_box());
if ($action eq 'create') {
- $r->print('<input type="text" name="groupname" size="25" />'
+ $r->print(&Apache::lonhtmlcommon::row_title('<label for="groupname">'.$lt{'gnam'}.'</label>')
+ .'<input type="text" name="groupname" id="groupname" size="25" />'
.' <span class="LC_nobreak">('
.$lt{'lett'}.')</span>'
);
} else {
- $r->print('<input type="hidden" name="groupname" value="'.
- $env{'form.groupname'}.'" />'.$env{'form.groupname'});
+ $r->print(&Apache::lonhtmlcommon::row_title($lt{'gnam'})
+ .'<input type="hidden" name="groupname" value="'
+ .$env{'form.groupname'}.'" />'.$env{'form.groupname'});
}
$r->print(&Apache::lonhtmlcommon::row_closure());
# Group Title
- $r->print(&Apache::lonhtmlcommon::row_title($lt{'desc'})
- .'<input type="text" name="description" size="40" value="" />'
+ $r->print(&Apache::lonhtmlcommon::row_title('<label for="description">'.$lt{'desc'}.'</label>')
+ .'<input type="text" name="description" id="description" size="40" value="" />'
.&Apache::lonhtmlcommon::row_closure()
);
@@ -1749,32 +1751,37 @@
.' onclick="javascript:checkAll(document.'.$formname.'.tool)" />'
.' <input type="button" value="'.&mt('uncheck all').'"'
.' onclick="javascript:uncheckAll(document.'.$formname.'.tool)" />'
- .'</div>'
- .'<table cellpadding="5px"><tr>' # FIXME Get rid of inflexible table (-> float)
+ .'</div><fieldset class="LC_borderless">'
+ .'<legend class="LC_visually_hidden">'.$lt{'func'}.'</legend>'
+ .'<div role="grid" class="LC_grid">'
+ .'<div role="row" class="LC_grid_row">'
);
for (my $i=0; $i<@allfunctions; $i++) {
- $r->print('<td><label><span class="LC_nobreak">'
+ $r->print('<div role="gridcell" class="LC_grid_cell"><label><span class="LC_nobreak">'
.'<input type="checkbox" name="tool" value="'
.$allfunctions[$i].'" /> '
.&mt($$functions{$allfunctions[$i]})
- .'</span></label></td>'
+ .'</span></label></div>'
);
if ($i == $halfnum - 1) {
- $r->print('</tr><tr>');
+ $r->print('</div><div role="row" class="LC_grid_row">');
}
}
- $r->print('</tr></table>'
+ $r->print('</div></div></fieldset>'
.&Apache::lonhtmlcommon::row_closure()
);
# Granularity
$r->print(&Apache::lonhtmlcommon::row_title($lt{'gran'})
+ .'<fieldset class="LC_borderless"><legend class="LC_visually_hidden">'
+ .$lt{'gran'}.'</legend>'
.$lt{'doyo'}.'<br />'
.'<label>'
.'<input type="radio" name="granularity" value="Yes" />'.&mt('Yes')
.'</label> <label>'
.'<input type="radio" name="granularity" value="No" checked="checked" />'.&mt('No')
.'</label>'
+ .'</fieldset>'
);
if ($action eq 'modify') {
$r->print(' <span class="LC_nobreak">('
@@ -1786,7 +1793,7 @@
$r->print(&Apache::lonhtmlcommon::row_closure());
# Disk Quota
- $r->print(&Apache::lonhtmlcommon::row_title($lt{'dquo'}));
+ $r->print(&Apache::lonhtmlcommon::row_title('<label for="quota">'.$lt{'dquo'}.'</label>'));
if ($action eq 'create') {
$r->print('<span class="LC_info">'
.&mt('If you enable the group portfolio for the '.$gpterm
@@ -1796,7 +1803,7 @@
} else {
$r->print(&mt('Quota allocated to group portfolio:'));
}
- $r->print(' '.&mt('[_1] MB','<input type="text" name="quota" size="4" />'));
+ $r->print(' '.&mt('[_1] MB','<input type="text" name="quota" id="quota" size="4" />'));
if ($action eq 'create') {
$r->print('<br />'
.&mt('A total of [_1] MB can be divided amongst all '.$gpterm.'s in the '
@@ -1900,9 +1907,9 @@
<br />
<table class="LC_status_selector">
<tr>
- <th>'.$lt{'acty'}.'</th>
- <th>'.$lt{'coro'}.'</th>
- <th>'.$lt{'cose'}.'</th>
+ <th><label for="types">'.$lt{'acty'}.'</label></th>
+ <th><label for="roles">'.$lt{'coro'}.'</label></th>
+ <th><label for="sectionpick">'.$lt{'cose'}.'</label></th>
</tr><tr><td>');
$r->print(&Apache::lonhtmlcommon::status_select_row(\%status_types));
$r->print('</td><td>');
@@ -1915,14 +1922,20 @@
@sections = ('all','none');
}
$r->print('</td><td>'.
- §ions_selection(\@sections,'sectionpick').'</td>
+ §ions_selection(\@sections,'sectionpick','sectionpick').'</td>
</tr>
</table>');
return;
}
sub sections_selection {
- my ($sections,$elementname) = @_;
+ my ($sections,$elementname,$elementid,$arialabel) = @_;
+ if ($elementid ne '') {
+ $elementid = ' id="'.$elementid.'"';
+ }
+ if ($arialabel ne '') {
+ $arialabel = ' aria-label="'.$arialabel.'"';
+ }
my $section_sel;
my $numvisible = 4;
if (@{$sections} < 4) {
@@ -1938,7 +1951,7 @@
}
}
my $output = '
- <select name="'.$elementname.'" multiple="multiple" size="'.$numvisible.'">
+ <select name="'.$elementname.'" multiple="multiple" size="'.$numvisible.'"'.$elementid.$arialabel.'>
'.$section_sel.'
</select>';
return $output;
@@ -2184,8 +2197,9 @@
if (keys(%members) > 0) {
$r->print('
<table>
- <tr>');
+ <tr><td>');
&check_uncheck_buttons($r,$formname,'member',$lt{'addm'});
+ $r->print('</td>');
if (@{$available} > 0 && $granularity eq 'Yes') {
$r->print('<td>
<fieldset><legend>'.$lt{'setf'}.'</legend>
@@ -2222,7 +2236,7 @@
foreach my $tool (@{$available}) {
$r->print('<label><input type="checkbox" name="togglefunc" '.
'onclick="javascript:toggleTools(document.'.$formname.'.user_'.$tool.',this);"'.
- ' value="'.$tool.'">'.'<b>'.$tool.'</b></label> ');
+ ' value="'.$tool.'" />'.'<b>'.$tool.'</b></label> ');
}
$r->print('</span></td></tr>');
}
@@ -2262,8 +2276,8 @@
' ');
foreach my $tool (@{$available}) {
if ($granularity eq 'Yes') {
- $r->print('<input type="checkbox" name="user_'.
- $tool.'" value="'.$user.'" />'.$tool.' ');
+ $r->print('<label><input type="checkbox" name="user_'.
+ $tool.'" value="'.$user.'" />'.$tool.'</label> ');
} else {
$r->print('<input type="hidden" name="user_'.
$tool.'" value="'.$user.'" />'.$tool.' ');
@@ -2319,6 +2333,7 @@
'will receive by default for a specific tool.',
'oppr' => 'Optional privileges',
'defp' => 'The default privileges new members will receive are:',
+ 'chec' => 'Optional privileges selection',
);
$lt{'plin'} = &mt('Indicate which [_1]optional[_2] privileges members '.
'will receive by default for a specific tool.','<b>','</b>');
@@ -2359,9 +2374,9 @@
}
if ($totaloptionalprivs) {
$r->print('
-<br />
+<br /><fieldset class="LC_borderless"><legend class="LC_visually_hidden">'.$lt{'chec'}.'</legend>
<label><span class="LC_nobreak"><input type="radio" name="specificity" value="No" '.$specific{'No'}.' /> '.$lt{'algm'}.'</span></label><br />
-<label><span class="LC_nobreak"><input type="radio" name="specificity" value="Yes" '.$specific{'Yes'}.' /> '.$lt{'smgp'}.'</span></label><br /><br />');
+<label><span class="LC_nobreak"><input type="radio" name="specificity" value="Yes" '.$specific{'Yes'}.' /> '.$lt{'smgp'}.'</span></label></fieldset><br /><br />');
} else {
$r->print('<input type="hidden" name="specificity" value="No" />');
}
@@ -2376,14 +2391,9 @@
} else {
$r->print('('.&mt('if enabled below').').');
}
- $r->print('<br /><br />
- <table><tr>');
- &check_uncheck_buttons($r,$formname,'defpriv',$lt{'oppr'});
- $r->print('
- </tr>
- </table>
- <br />
-');
+ $r->print('<br /><br />');
+ &check_uncheck_buttons($r,$formname,'defpriv',$lt{'oppr'});
+ $r->print('<br />');
} else {
$r->print($lt{'algm'}.'<br /><br />');
}
@@ -2435,7 +2445,8 @@
if ($dynamic ne '') {
$dynamic .= '</td><td class="LC_groups_optional">';
}
- $dynamic .= '<table class="LC_group_priv"><tr>';
+ $dynamic .= '<div role="grid" class="LC_grid LC_group_priv" style="margin: 0; padding: 0;">'.
+ '<div role="row" class="LC_grid_row">';
foreach my $priv (sort(keys(%{$$toolprivs{$tool}}))) {
if (exists($$fixedprivs{$tool}{$priv})) {
if ($fixed ne '') {
@@ -2454,21 +2465,21 @@
} else {
$privcount++;
if ($privcount == 3) {
- $dynamic .= '</tr>
- <tr>'."\n";
+ $dynamic .= '</div>
+ <div role="row" class="LC_grid_row">'."\n";
}
- $dynamic .= '<td><span class="LC_nobreak"><label><input type="checkbox" name="defpriv" value="'.$priv.'" />'.&mt($$toolprivs{$tool}{$priv}).'</label></span></td>'."\n";
+ $dynamic .= '<div role="gridcell" class="LC_grid_cell"><span class="LC_nobreak"><label><input type="checkbox" name="defpriv" value="'.$priv.'" />'.&mt($$toolprivs{$tool}{$priv}).'</label></span></div>'."\n";
}
}
if ($privcount == 0) {
- $dynamic .= '<td>'.&mt('None').'</td>'."\n";
+ $dynamic .= '<div role="gridcell" class="LC_grid_cell">'.&mt('None').'</div>'."\n";
}
if ($privcount < 3) {
- $dynamic .= '<td> </td>'."\n";
+ $dynamic .= '<div role="gridcell" class="LC_grid_cell"> </div>'."\n";
} elsif ($privcount%2) {
- $dynamic = '<td> </td>'."\n";
+ $dynamic = '<div role="gridcell" class="LC_grid_cell"> </div>'."\n";
}
- $dynamic .= '</tr></table>';
+ $dynamic .= '</div></div>';
}
$r->print(&Apache::lonhtmlcommon::row_title($lt{'fixp'},undef,
'LC_groups_fixed').
@@ -2477,6 +2488,7 @@
$r->print(&Apache::lonhtmlcommon::row_title($lt{'oppr'},undef,
'LC_groups_optional').
$dynamic.
+ &Apache::lonhtmlcommon::row_closure(1).
&Apache::lonhtmlcommon::end_pick_box());
$r->print('<br />');
return;
@@ -2625,18 +2637,28 @@
<table>
<tr>');
if ($num_items->{'active'}) {
+ $r->print('<td>');
&check_uncheck_buttons($r,$formname,'expire',$lt{'expi'});
+ $r->print('</td>');
}
if ($num_items->{'previous'}) {
+ $r->print('<td>');
&check_uncheck_buttons($r,$formname,'reenable',$lt{'reen'});
+ $r->print('</td>');
}
if ($num_items->{'future'}) {
+ $r->print('<td>');
&check_uncheck_buttons($r,$formname,'activate',$lt{'acti'});
+ $r->print('</td>');
}
+ $r->print('<td>');
&check_uncheck_buttons($r,$formname,'deletion',$lt{'dele'});
+ $r->print('</td>');
if (@{$available} > 0) {
if ($specificity eq 'Yes') {
+ $r->print('<td>');
&check_uncheck_buttons($r,$formname,'changepriv',$lt{'chpr'});
+ $r->print('</td>');
}
if ($granularity eq 'Yes') {
$r->print(&check_uncheck_tools($r,$available));
@@ -2800,10 +2822,9 @@
}
sub check_uncheck_buttons {
- my ($r,$formname,$field,$title,$colspan) = @_;
+ my ($r,$formname,$field,$title) = @_;
$r->print('
- <td '.$colspan.'>
- <fieldset>
+ <fieldset style="display:inline">
<legend>'.$title.'</legend>
<span class="LC_nobreak">
<input type="button" value="'.&mt('check all').'"
@@ -2813,7 +2834,6 @@
onclick="javascript:uncheckAll(document.'.$formname.'.'.$field.')" />
</span>
</fieldset>
- </td>
');
}
@@ -3081,30 +3101,18 @@
my $colspan = $numcells + 1;
my %total;
if (keys(%{$usertools}) > 1) {
- $r->print('
- <table border="0" cellspacing="2" cellpadding="2">
- <tr>
-');
foreach my $tool (@{$tools}) {
if (@{$showboxes{$tool}} > 0) {
- $r->print('<td valign="top">');
+ $r->print('<div class="LC_floatleft">');
$r->print('<fieldset><legend>'.&mt($tool).'</legend>');
- $r->print('<table><tr>');
+ $r->print('<div role="grid" class="LC_grid">'."\n".
+ '<div role="row" class="LC_grid_row">');
my $privcount = 0;
foreach my $priv (@{$showboxes{$tool}}) {
$privcount ++;
- if (($privcount == @{$showboxes{$tool}}) &&
- ($privcount > 1)) {
- if ($privcount%$numcells) {
- $r->print('<td colspan="'.$colspan.'">');
- } else {
- $r->print('<td>');
- }
- } else {
- $r->print('<td>');
- }
$r->print(
- '<fieldset><legend>'.&mt($$toolprivs{$tool}{$priv}).'</legend>'
+'<div role="gridcell" class="LC_grid_cell">'."\n"
+.'<fieldset><legend>'.&mt($$toolprivs{$tool}{$priv}).'</legend>'
.'<span class="LC_nobreak">'
.' <input type="button" value="'.&mt('check all').'"'
.' onclick="javascript:checkAll(document.'.$formname.'.userpriv_'.$priv.')" />'
@@ -3113,21 +3121,21 @@
.' onclick="javascript:uncheckAll(document.'.$formname.'.userpriv_'.$priv.')" />'
.'</span></fieldset><br />'
);
- $r->print('</td>');
+ $r->print('</div>');
if ($privcount < @{$showboxes{$tool}}) {
if (@{$showboxes{$tool}} > 2) {
if ($privcount%$numcells == 0) {
- $r->print('</tr><tr>');
+ $r->print('</div><div role="row" class="LC_grid_row">');
}
} else {
- $r->print('<tr></tr>');
+ $r->print('</div><div role="row" class="LC_grid_row">');
}
}
}
- $r->print('</tr></table></fieldset></td><td> </td>');
+ $r->print('</div></div></fieldset></div>');
}
}
- $r->print('</tr></table>');
+ $r->print('<div style="padding:0;clear:both;margin:0;border:0"></div>'."\n");
}
$r->print(&Apache::loncommon::start_data_table().
&Apache::loncommon::start_data_table_header_row());
@@ -3172,15 +3180,9 @@
my $earlyout = &validate_groupname($groupname,$action,$cdom,$cnum,$gpterm,
$ucgpterm,$crstype);
if ($earlyout) {
- $r->print('
-<table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td> </td>
- <td colspan="3">
-'.$earlyout.'</td></tr>');
+ $r->print('<div>'.$earlyout.'</div>');
&display_navbuttons($r,$state,$$states{$action}[$page-1],
$$navbuttons{'gtps'});
- $r->print('</table>');
return;
}
@@ -3687,6 +3689,8 @@
'off' => 'off',
'auad' => "Automatically enable $gpterm membership when roles are added?",
'auex' => "Automatically expire $gpterm membership when roles are removed?",
+ 'aadd' => 'Auto-add membership on role assignment',
+ 'aexp' => 'Auto-expire membership on role revocation',
'mapr' => "Mapping of roles and sections affected by automatic $gpterm enrollment/disenrollment follows scheme chosen below.",
);
&automapping($r,$action,$stored,\%lt,$img1);
@@ -3707,19 +3711,21 @@
}
$r->print(&Apache::lonhtmlcommon::topic_bar($image,$$lt{'endi'}).'
<b>'.$$lt{'gmma'}.':</b><br />'.$$lt{'adds'}.'<br />'.$$lt{'drops'}.'<br /><br />
- <span class="LC_nobreak">'.$$lt{'auad'}.':
+ <fieldset class="LC_borderless"><legend class="LC_visually_hidden">'.$lt->{'aadd'}.'</legend>
+ <span class="LC_nobreak">'.$$lt{'auad'}.':
<label><input type="radio" name="autoadd" value="on" />'.&mt('on').' </label><label><input type="radio" name="autoadd" value="off" checked="checked" />'.&mt('off').'</label>');
if ($action eq 'modify') {
$r->print(' ('.&mt('Currently set to [_1].','<b>'.$$lt{$add}.'</b>').')');
}
$r->print('
- </span><br />
+ </span></fieldset><br />
+ <fieldset class="LC_borderless"><legend class="LC_visually_hidden">'.$lt->{'aexp'}.'</legend>
<span class="LC_nobreak">'.$$lt{'auex'}.':
<label><input type="radio" name="autodrop" value="on" />'.&mt('on').' </label><label><input type="radio" name="autodrop" value="off" checked="checked" />'.&mt('off').'</label>');
if ($action eq 'modify') {
$r->print(' ('.&mt('Currently set to [_1].','<b>'.$$lt{$drop}.'</b>').')');
}
- $r->print('</span><br /><br />'.$$lt{'mapr'});
+ $r->print('</span></fieldset><br /><br />'.$$lt{'mapr'});
}
sub mapping_settings {
@@ -3735,6 +3741,8 @@
$r->print(&Apache::lonhtmlcommon::topic_bar($image,$$lt{'pirs'}));
my @roles = &standard_roles($crstype);
my %customroles = &Apache::lonhtmlcommon::course_custom_roles($cdom,$cnum);
+ $r->print('<fieldset class="LC_borderless"><legend class="LC_visually_hidden">'.
+ $$lt{'pirs'}.'</legend>');
$r->print(&Apache::loncommon::start_data_table().
&Apache::loncommon::start_data_table_header_row());
$r->print('
@@ -3769,30 +3777,34 @@
}
}
$r->print(&Apache::loncommon::end_data_table());
+ $r->print('</fieldset>');
return;
}
sub print_autorole_item {
my ($role,$roletitle,$sections) = @_;
my $sections_sel;
+ my $roleforid = $role;
+ $roleforid =~ s{/+}{_}g;
if (@{$sections} > 0) {
if (($role eq 'cc') || ($role eq 'co')) {
$sections_sel = '<td align="right">'.
&mt('all sections').'<input type="hidden" '.
'name="sec_'.$role.'" value="all" /></td>';
} else {
+ my $arialabel = &mt('Sections for automatic group enrollment for [_1]',$roletitle);
$sections_sel='<td align="right">'.
- §ions_selection($sections,'sec_'.$role).
+ §ions_selection($sections,'sec_'.$role,'',$arialabel).
'</td>';
}
}
my $output = &Apache::loncommon::start_data_table_row().
'<td><input type="checkbox" '.
- 'name="autorole" value="'.$role.'" />'.
- '</td><td>'.$roletitle.'</td>'.$sections_sel.
+ 'name="autorole" id="autorole_'.$roleforid.'" value="'.$role.'" />'.
+ '</td><td><label for="autorole_'.$roleforid.'">'.$roletitle.'</label></td>'.$sections_sel.
&Apache::loncommon::end_data_table_row();
return $output;
-}
+}
sub standard_roles {
my ($crstype) = @_;
@@ -3854,22 +3866,32 @@
<td>'.$uname.'</td>
<td>'.$udom.'</td>
<td valign="top">
- <table>
- <tr>
- <td><b>'.
- &mt('Collaborative Tool').'</b></td>
- </tr>
- <tr>
- <td><b>'.&mt('Fixed').'</b></td>
- </tr>
- <tr>
- <td><b>'.&mt('Optional').'</b></td>
- </tr>
- </table>
- </td>');
+ <div role="grid" class="LC_grid">
+ <div role="row" class="LC_grid_row">
+ <div role="gridcell" class="LC_grid_cell"><b>
+ '.&mt('Collaborative Tool').'
+ </b></div>
+ </div>
+ <div role="row" class="LC_grid_row">
+ <div role="gridcell" class="LC_grid_cell"><b>
+ '.&mt('Fixed').'
+ </b></div>
+ </div>
+ <div role="row" class="LC_grid_row">
+ <div role="gridcell" class="LC_grid_cell"><b>
+ '.&mt('Optional').'
+ </b></div>
+ </div>
+ </div>
+ </td>');
foreach my $tool (@{$showtools}) {
if (exists($$usertools{$user}{$tool})) {
- $r->print('<td valign="top"><table><tr><th colspan="2">'.$tool.'</th></tr>');
+ $r->print('<td valign="top">'.
+ '<fieldset class="LC_borderless">'.
+ '<legend class="LC_visually_hidden">'.
+ &mt('Additional privileges for [_1]',$$userdata{$user}[$$idx{fullname}]).
+ '</legend>'."\n".
+ '<table><tr><th colspan="2">'.$tool.'</th></tr>'."\n");
my $privcount = 0;
my $fixed = '';
my $dynamic = '';
@@ -3890,7 +3912,11 @@
'</label></span></td>';
}
}
- $r->print('<tr><td colspan="2"><span class="LC_nobreak">'.$fixed.'</span></td></tr><tr>'.$dynamic.'</tr></table></td>');
+ $r->print('<tr><td colspan="2"><span class="LC_nobreak">'.$fixed.'</span></td></tr>'."\n");
+ if ($dynamic ne '') {
+ $r->print('<tr>'.$dynamic.'</tr>');
+ }
+ $r->print('</table></fieldset></td>');
} else {
$r->print('<td valign="top"><table width="100%"><tr><th colspan="2">'.$tool.'</th></tr><tr><td> </td></tr><tr><td> </td></tr></table></td>');
}
More information about the LON-CAPA-cvs
mailing list