-
-
-
- '.$lt{'grna'}.' |
- '.$lt{'desc'}.' |
- '.$lt{'grfn'}.' |
- '.$lt{'gran'}.' |
- '.$lt{'dfac'}.' |
-
-
- '.$groupname.' |
- '.$description.' |
+ '.$groupname.' |
+ '.$description.' |
');
if (@{$available} > 0) {
- $r->print('Available:
- ');
+ $r->print('Available:
+ ');
my $rowcell = int(@{$available}/2) + @{$available}%2;
for (my $i=0; $i<@{$available}; $i++) {
if (@{$available} > 3) {
@@ -1484,8 +1580,8 @@ sub print_current_settings {
$r->print(' ');
}
}
- $r->print(''.$$functions{$$available[$i]}.
- ' | | ');
+ $r->print(''.$$functions{$$available[$i]}.
+ ' | | ');
}
if ((@{$available} > 3) && (@{$available}%2)) {
$r->print(' | | ');
@@ -1493,8 +1589,8 @@ sub print_current_settings {
$r->print('
');
}
if (@{$unavailable} > 0) {
- $r->print('Unavailable:
- ');
+ $r->print('Unavailable:
+ ');
my $rowcell = int(@{$unavailable}/2) + @{$unavailable}%2;
for (my $j=0; $j<@{$unavailable}; $j++) {
if (@{$unavailable} > 3) {
@@ -1502,8 +1598,8 @@ sub print_current_settings {
$r->print(' ');
}
}
- $r->print(''.$$functions{$$unavailable[$j]}.
- ' | | ');
+ $r->print(''.$$functions{$$unavailable[$j]}.
+ ' | | ');
}
if ((@{$unavailable} > 3) && (@{$unavailable}%2)) {
$r->print(' | | ');
@@ -1512,33 +1608,29 @@ sub print_current_settings {
}
$r->print(<<"END");
- $lt{'difn'}
- $granularity
- | $lt{'stda'} $showstart
- $lt{'enda'} $showend
+ | $lt{'difn'} $granularity |
+ $quota Mb |
+ $lt{'stda'} $showstart
+ $lt{'enda'} $showend
|
-
-
-
-
END
- $r->print(&Apache::lonhtmlcommon::end_pick_box());
- $r->print('
');
+ $r->print(&Apache::loncommon::end_data_table_row().
+ &Apache::loncommon::end_data_table());
return;
}
sub pick_new_members {
- my ($r,$action,$formname,$tabcol,$rowColor1,$rowColor2,$available,$idx,
- $stored,$img,$users,$userdata,$granularity,$origmembers) = @_;
+ my ($r,$action,$formname,$available,$idx,$stored,$img,$users,$userdata,
+ $granularity,$origmembers,$gpterm,$ucgpterm) = @_;
my %lt = &Apache::lonlocal::texthash(
- 'gpme' => 'Group membership',
+ 'gpme' => "$ucgpterm membership",
'addm' => 'Add members',
'setf' => 'Set functionality',
'func' => 'Functionality',
'nome' => 'No members to add at this time.',
- 'nnew' => 'There are no users to add as new members, as all users'.
- ' matching the specified type(s), role(s), and/or '.
- 'section(s) are already affiliated with this group.',
+ 'nnew' => "There are no users to add as new members, as all users".
+ " matching the specified type(s), role(s), and/or ".
+ "section(s) are already affiliated with this $gpterm.",
'yoma' => 'You may need to use the '."'".'modify existing, past or '.
'future members'."'".' page if you need to re-enable '.
'or activate access for previous or future members.',
@@ -1565,61 +1657,51 @@ sub pick_new_members {
$r->print(&check_uncheck_tools($r,$available));
}
}
- &topic_bar($r,$tabcol,$img,$lt{'gpme'});
+ &topic_bar($r,$img,$lt{'gpme'});
if (keys(%members) > 0) {
$r->print('
-
- |
-
- |
-
-
- |
-
-
- |
-
');
- $r->print(&Apache::lonhtmlcommon::start_pick_box());
+ $r->print(&Apache::loncommon::start_data_table().
+ &Apache::loncommon::start_data_table_header_row());
$r->print('
-
-
- '.&mt('Add?').' |
- '.&mt('Name').' |
- '.&mt('Username').'
- |
- '.&mt('Domain').' |
- ID |
+ '.&mt('Add?').'
+ | '.&mt('Name').'
+ | '.&mt('Username').'
+ | '.&mt('Domain').'
+ | '.&mt('ID').'
+ | '.&mt('Section').'
');
if (@{$available} > 0) {
- $r->print(' | '.$lt{'func'}.' | ');
+ $r->print(''.$lt{'func'}.' | ');
}
- $r->print(' ');
+ $r->print(&Apache::loncommon::end_data_table_header_row());
if (@{$available} > 0) {
if ($granularity eq 'Yes') {
- $r->print('
- |
- '.&mt('All:').' ');
+ $r->print(&Apache::loncommon::start_data_table_row('LC_data_table_dense LC_data_table_highlight').'
+ |
+ '.&mt('All:').' ');
foreach my $tool (@{$available}) {
$r->print(' ');
}
- $r->print(' | | ');
+ $r->print('');
}
}
my %Sortby = ();
@@ -1632,29 +1714,28 @@ sub pick_new_members {
push(@{$Sortby{$members{$user}[$$idx{udom}]}},$user);
} elsif ($env{'form.sortby'} eq 'id') {
push(@{$Sortby{$members{$user}[$$idx{id}]}},$user);
+ } elsif ($env{'form.sortby'} eq 'section') {
+ push(@{$Sortby{$members{$user}[$$idx{section}]}},$user);
} else {
push(@{$Sortby{$members{$user}[$$idx{fullname}]}},$user);
}
}
- my $rowNum = 0;
- my $rowColor;
foreach my $key (sort(keys(%Sortby))) {
foreach my $user (@{$Sortby{$key}}) {
- if ($rowNum %2 == 1) {
- $rowColor = $rowColor1;
- } else {
- $rowColor = $rowColor2;
- }
my $id = $members{$user}[$$idx{id}];
my $fullname = $members{$user}[$$idx{fullname}];
my $udom = $members{$user}[$$idx{udom}];
my $uname = $members{$user}[$$idx{uname}];
- $r->print('
- | '.
- $fullname.' | '.$uname.' | '.
- $udom.' | '.$id.' | ');
+ my $section = $members{$user}[$$idx{section}];
+ $r->print(&Apache::loncommon::start_data_table_row('LC_data_table_dense').
+ ' | '.
+ ''.$fullname.' | '.
+ ''.$uname.' | '.
+ ''.$udom.' | '.
+ ''.$id.' | '.
+ ''.$section.' | ');
if (@{$available} > 0) {
- $r->print(''.
+ $r->print(''.
' ');
foreach my $tool (@{$available}) {
if ($granularity eq 'Yes') {
@@ -1665,37 +1746,25 @@ sub pick_new_members {
$tool.'" value="'.$user.'" />'.$tool.' ');
}
}
- $r->print(' | ');
+ $r->print(' | ');
}
- $r->print(' '."\n");
- $rowNum ++;
+ $r->print(&Apache::loncommon::end_data_table_row()."\n");
}
}
- $r->print(&Apache::lonhtmlcommon::end_pick_box());
- $r->print('
-
- ');
+ $r->print(&Apache::loncommon::end_data_table());
} else {
- $r->print('
-
- |
-
-');
if ($totalusers > 0) {
$r->print($lt{'nnew'}.'
'.$lt{'yoma'});
} else {
$r->print($lt{'nome'});
}
- $r->print('
- |
- ');
}
return $newusers;
}
sub privilege_specificity {
- my ($r,$tabcol,$rowColor1,$rowColor2,$action,$img,$tools,$stored,
- $toolprivs,$fixedprivs,$available,$formname) = @_;
+ my ($r,$action,$img,$tools,$stored,$toolprivs,$fixedprivs,$available,
+ $formname,$gpterm,$ucgpterm) = @_;
my %lt = &Apache::lonlocal::texthash (
'uprv' => 'User privileges',
'frty' => 'For each type of functionality you have chosen to include, '.
@@ -1710,19 +1779,19 @@ sub privilege_specificity {
'privileges which apply to members with access to that '.
'functionality, and may also include additional privileges '.
'which can be set for specific members.',
- 'cutg' => 'Currently the group is configured ',
- 'sdif' => 'so different group members can receive different privileges.',
- 'sall' => 'so all group members will receive the same privileges.',
- 'algm' => 'All group members will receive the same privileges.',
- 'smgp' => 'Some group members will receive different privileges from '.
- 'others.',
- 'thwi' => 'These will be the privileges all group members receive, '.
- 'if you selected the first option above.',
- 'thes' => 'These will be the privileges given to members assigned '.
- 'in the future, including via automatic group assignment '.
- 'for specific sections/roles ',
- 'asyo' => 'As you have chosen not to include any functionality in the '.
- 'group, no default user privileges settings need to be set.',
+ 'cutg' => "Currently the $gpterm is configured ",
+ 'sdif' => "so different $gpterm members can receive different privileges.",
+ 'sall' => "so all $gpterm members will receive the same privileges.",
+ 'algm' => "All $gpterm members will receive the same privileges.",
+ 'smgp' => "Some $gpterm members will receive different privileges from ".
+ "others.",
+ 'thwi' => "These will be the privileges all $gpterm members receive, ".
+ "if you selected the first option above.",
+ 'thes' => "These will be the privileges given to members assigned ".
+ "in the future, including via automatic $gpterm assignment ".
+ "for specific sections/roles ",
+ 'asyo' => "As you have chosen not to include any functionality in the ".
+ "$gpterm, no default user privileges settings need to be set.",
'plin' => 'Please indicate which optional privileges members '.
'will receive by default.',
'oppr' => 'Optional privileges',
@@ -1736,12 +1805,7 @@ sub privilege_specificity {
}
}
}
- &topic_bar($r,$tabcol,$img,$lt{'uprv'});
- $r->print('
-
- |
-
- ');
+ &topic_bar($r,$img,$lt{'uprv'});
if ((($action eq 'create') && (@{$available} > 0)) ||
(($action eq 'modify') && ($formname eq 'change_settings'))) {
my %specific = (
@@ -1767,21 +1831,14 @@ sub privilege_specificity {
}
if ($totaloptionalprivs) {
$r->print('
-
-
- |
-
-
- |
- ');
+
+
+');
} else {
$r->print('');
}
if ($totaloptionalprivs) {
- $r->print('
-
- |
- '.$lt{'plin'});
+ $r->print($lt{'plin'});
if ($action eq 'create') {
$r->print(' '.$lt{'thwi'});
}
@@ -1792,27 +1849,18 @@ sub privilege_specificity {
$r->print('('.&mt('if enabled below').').');
}
$r->print('
- |
-
-
- |
- ');
+ ');
&check_uncheck_buttons($r,$formname,'defpriv',$lt{'oppr'});
$r->print('
-
- |
-
- |
-
');
} else {
- $r->print(' | | '.$lt{'algm'}.'
');
+ $r->print($lt{'algm'}.'
');
}
- &default_privileges($r,$action,$tabcol,$rowColor1,$rowColor2,
- $tools,$toolprivs,$fixedprivs,$available);
+ &default_privileges($r,$action,$tools,$toolprivs,$fixedprivs,
+ $available);
} else {
if ($action eq 'create') {
$r->print($lt{'asyo'});
@@ -1828,95 +1876,85 @@ sub privilege_specificity {
$r->print($lt{'sall'});
}
$r->print(' '.$lt{'defp'}.'
');
- &display_defprivs($r,$tabcol,$rowColor1,$rowColor2,$tools,
- $toolprivs,\@defprivs);
+ &display_defprivs($r,$tools,$toolprivs,\@defprivs);
}
}
- $r->print('
- |
-
-');
return;
}
sub default_privileges {
- my ($r,$action,$tabcol,$rowColor1,$rowColor2,$tools,$toolprivs,
- $fixedprivs,$available) = @_;
+ my ($r,$action,$tools,$toolprivs,$fixedprivs,$available) = @_;
my %lt = &Apache::lonlocal::texthash(
'addp' => 'Additional privileges',
'fixp' => 'Fixed privileges',
'oppr' => 'Optional privileges',
'func' => 'Function',
);
- $r->print(&Apache::lonhtmlcommon::start_pick_box());
- $r->print('
-
-
-
- '.$lt{'func'}.' |
-
-
- '.$lt{'fixp'}.' |
-
-
- '.$lt{'oppr'}.' |
-
-
- |
- ');
+ $r->print(&Apache::lonhtmlcommon::start_pick_box('LC_group_priv_box').
+ &Apache::lonhtmlcommon::row_title($lt{'func'},undef,
+ 'LC_groups_functionality'));
+ $r->print(join('',@{$tools}));
+ $r->print(&Apache::lonhtmlcommon::row_closure(1));
+ my $fixed = '';
+ my $dynamic = '';
foreach my $tool (@{$tools}) {
- $r->print(' |
-
-
- '.$tool.' |
-
- ');
my $privcount = 0;
- my $fixed = '';
- my $dynamic = '';
+ if ($dynamic ne '') {
+ $dynamic .= '';
+ }
+ $dynamic .= ''."\n".' |
- ');
+ $dynamic .= ' ';
}
- $r->print(' | '."\n");
- $r->print(&Apache::lonhtmlcommon::end_pick_box());
+ $r->print(&Apache::lonhtmlcommon::row_title($lt{'fixp'},undef,
+ 'LC_groups_fixed').
+ $fixed.
+ &Apache::lonhtmlcommon::row_closure(1));
+ $r->print(&Apache::lonhtmlcommon::row_title($lt{'oppr'},undef,
+ 'LC_groups_optional').
+ $dynamic.
+ &Apache::lonhtmlcommon::end_pick_box());
$r->print(' ');
return;
+
}
sub display_defprivs {
- my ($r,$tabcol,$rowColor1,$rowColor2,$tools,$toolprivs,$defprivs) = @_;
+ my ($r,$tools,$toolprivs,$defprivs) = @_;
+ my $function = &Apache::loncommon::get_users_function();
+ my $tabcol = &Apache::loncommon::designparm($function.'.tabbg');
+ my $rowColor1 = "#dddddd";
+ my $rowColor2 = "#eeeeee";
my %lt = &Apache::lonlocal::texthash(
'priv' => 'Privileges',
'func' => 'Function',
@@ -1929,7 +1967,7 @@ sub display_defprivs {
@{$currprivs{$tool}} = ();
foreach my $priv (sort(keys(%{$$toolprivs{$tool}}))) {
if (ref($defprivs) eq 'ARRAY') {
- if (grep/^\Q$priv\E$/,@{$defprivs}) {
+ if (grep(/^\Q$priv\E$/,@{$defprivs})) {
push(@{$currprivs{$tool}},$priv);
}
}
@@ -1985,13 +2023,13 @@ sub display_defprivs {
sub change_members_form {
- my ($r,$cdom,$cnum,$tabcol,$action,$formname,$page,$groupname,$description,
+ my ($r,$cdom,$cnum,$action,$formname,$page,$groupname,$description,
$startdate,$enddate,$tools,$fixedprivs,$functions,$users,$userdata,
- $granularity,$specificity,$idx,$states,$navbuttons,$rowColor1,
- $rowColor2) = @_;
+ $granularity,$quota,$specificity,$idx,$states,$navbuttons,$gpterm,
+ $ucgpterm) = @_;
my %lt = &Apache::lonlocal::texthash(
- grse => 'Group settings',
- mogm => 'Modify group membership',
+ grse => "$ucgpterm settings",
+ mogm => "Modify $gpterm membership",
);
my @regexps = ('user_','userpriv_');
$r->print(&Apache::lonhtmlcommon::echo_form_input(
@@ -2006,38 +2044,22 @@ sub change_members_form {
my $prevtext = $$navbuttons{'gtpp'};
$r->print('
-
-');
- &topic_bar($r,$tabcol,1,$lt{'grse'});
- $r->print('
-
- |
-
');
- &print_current_settings($r,$action,$tabcol,$rowColor1,$rowColor2,
- $functions,$startdate,$enddate,$groupname,
- $description,$granularity,\@available,\@unavailable);
-$r->print('
- | | ');
- &topic_bar($r,$tabcol,2,$lt{'mogm'});
- $r->print('
-
- |
-
-');
- ¤t_membership($r,$cdom,$cnum,$formname,$tabcol,$rowColor1,
- $rowColor2,$groupname,\@available,\@unavailable,
- $fixedprivs,$granularity,$specificity);
- $r->print(' | ');
+ &topic_bar($r,1,$lt{'grse'});
+ &print_current_settings($r,$action,$functions,$startdate,$enddate,
+ $groupname,$description,$granularity,$quota,
+ \@available,\@unavailable,$gpterm,$ucgpterm);
+ &topic_bar($r,2,$lt{'mogm'});
+ ¤t_membership($r,$cdom,$cnum,$formname,$groupname,\@available,
+ \@unavailable,$fixedprivs,$granularity,$specificity);
&display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext,
$$states{$action}[$page+1],$nexttext);
- $r->print(' ');
return;
}
sub current_membership {
- my ($r,$cdom,$cnum,$formname,$tabcol,$rowColor1,$rowColor2,$groupname,
- $available,$unavailable,$fixedprivs,$granularity,$specificity) = @_;
+ my ($r,$cdom,$cnum,$formname,$groupname,$available,$unavailable,
+ $fixedprivs,$granularity,$specificity) = @_;
my %membership = &Apache::lonnet::get_group_membership($cdom,$cnum,
$groupname);
my %lt = &Apache::lonlocal::texthash(
@@ -2054,113 +2076,30 @@ sub current_membership {
'curf' => 'Current Functionality',
'chpr' => 'Change Privileges'
);
- if (keys(%membership) > 0) {
- my %current = ();
- my %allnames = ();
- my $hastools = 0;
- my $addtools = 0;
- my $num_reenable = 0;
- my $num_activate = 0;
- my $num_expire - 0;
- foreach my $key (sort(keys(%membership))) {
- if ($key =~ /^\Q$groupname\E:([^:]+):([^:]+)$/) {
- my $uname = $1;
- my $udom = $2;
- my $user = $uname.':'.$udom;
- my($end,$start,@userprivs) = split(/:/,$membership{$key});
- unless ($start == -1) {
- $allnames{$udom}{$uname} = 1;
- %{$current{$user}} = ();
- $current{$user}{uname} = $uname;
- $current{$user}{udom} = $udom;
- $current{$user}{start} =
- &Apache::lonlocal::locallocaltime($start);
- if ($end == 0) {
- $current{$user}{end} = 'No end date';
- } else {
- $current{$user}{end} =
- &Apache::lonlocal::locallocaltime($end);
- }
- my $now = time;
- if (($end > 0) && ($end < $now)) {
- $current{$user}{changestate} = 'reenable';
- $num_reenable++;
- } elsif (($start > $now)) {
- $current{$user}{changestate} = 'activate';
- $num_activate ++;
- } else {
- $current{$user}{changestate} = 'expire';
- $num_expire ++;
- }
- @{$current{$user}{currtools}} = ();
- @{$current{$user}{newtools}} = ();
- if (@userprivs > 0) {
- foreach my $tool (sort(keys(%{$fixedprivs}))) {
- foreach my $priv (keys(%{$$fixedprivs{$tool}})) {
- if (grep/^$priv$/,@userprivs) {
- push(@{$current{$user}{currtools}},$tool);
- last;
- }
- }
- }
- $hastools = 1;
- }
- if (@{$available} > 0) {
- if (@{$current{$user}{currtools}} > 0) {
- if ("@{$available}" ne "@{$current{$user}{currtools}}") {
- foreach my $tool (@{$available}) {
- unless (grep/^$tool$/,@{$current{$user}{currtools}}) {
- push(@{$current{$user}{newtools}},$tool);
- }
- }
- }
- } else {
- @{$current{$user}{newtools}} = @{$available};
- }
- if (@{$current{$user}{newtools}} > 0) {
- $addtools = 1;
- }
- }
- }
- }
- }
- if (keys(%current) > 0) {
- my %idhash;
- foreach my $udom (keys(%allnames)) {
- %{$idhash{$udom}} = &Apache::lonnet::idrget($udom,
- keys(%{$allnames{$udom}}));
- foreach my $uname (keys(%{$idhash{$udom}})) {
- $current{$uname.':'.$udom}{'id'} = $idhash{$udom}{$uname};
- }
- foreach my $uname (keys(%{$allnames{$udom}})) {
- $current{$uname.':'.$udom}{'fullname'} =
- &Apache::loncommon::plainname($uname,$udom,
- 'lastname');
- }
- }
- $r->print('
-
- |
-
+ my ($current,$hastools,$addtools,$num_reenable,$num_activate,$num_expire) =
+ &Apache::longroup::group_memberlist($cdom,$cnum,$groupname,$fixedprivs,
+ $available);
+ if (keys(%{$current}) > 0) {
+ $r->print('
');
- if ($num_expire) {
- &check_uncheck_buttons($r,$formname,'expire',$lt{'expi'});
- }
- if ($num_reenable) {
- &check_uncheck_buttons($r,$formname,'reenable',$lt{'reen'});
- }
- if ($num_activate) {
- &check_uncheck_buttons($r,$formname,'activate',$lt{'acti'});
+ if ($num_expire) {
+ &check_uncheck_buttons($r,$formname,'expire',$lt{'expi'});
+ }
+ if ($num_reenable) {
+ &check_uncheck_buttons($r,$formname,'reenable',$lt{'reen'});
+ }
+ if ($num_activate) {
+ &check_uncheck_buttons($r,$formname,'activate',$lt{'acti'});
+ }
+ &check_uncheck_buttons($r,$formname,'deletion',$lt{'dele'});
+ if (@{$available} > 0) {
+ if ($specificity eq 'Yes') {
+ &check_uncheck_buttons($r,$formname,'changepriv',$lt{'chpr'});
}
- &check_uncheck_buttons($r,$formname,'deletion',$lt{'dele'});
- if (@{$available} > 0) {
- if ($specificity eq 'Yes') {
- &check_uncheck_buttons($r,$formname,'changepriv',$lt{'chpr'});
- }
- if ($granularity eq 'Yes') {
- $r->print(&check_uncheck_tools($r,$available));
- $r->print('
+ if ($granularity eq 'Yes') {
+ $r->print(&check_uncheck_tools($r,$available));
+ $r->print('
|
');
- }
}
- $r->print(<<"END");
+ }
+ $r->print(<<"END");
- |
- |
-
-
- |
-
-
- |
-
+
END
- $r->print(&Apache::lonhtmlcommon::start_pick_box());
- $r->print(<<"END");
-
-
- $lt{'actn'} |
- $lt{'name'} |
- $lt{'usnm'}
- |
- $lt{'doma'} |
- ID |
- $lt{'stda'} |
- $lt{'enda'} |
+ $r->print(&Apache::loncommon::start_data_table().
+ &Apache::loncommon::start_data_table_header_row());
+ $r->print(<<"END");
+ $lt{'actn'} |
+ $lt{'name'} |
+ $lt{'usnm'} |
+ $lt{'doma'} |
+ ID |
+ $lt{'stda'} |
+ $lt{'enda'} |
END
- my $colspan = 0;
- if ($hastools) {
- $r->print(''.$lt{'curf'}.' | ');
- $colspan ++;
- }
- if ($addtools) {
- $r->print('Additional Functionality | ');
- $colspan ++;
- }
- $r->print(' ');
- if ($colspan) {
- if ($granularity eq 'Yes') {
- $r->print('
+ my $colspan = 0;
+ if ($hastools) {
+ $r->print(''.$lt{'curf'}.' | ');
+ $colspan++;
+ }
+ if ($addtools) {
+ $r->print(''.&mt('Additional Functionality').' | ');
+ $colspan++;
+ }
+ $r->print(&Apache::loncommon::end_data_table_header_row());
+ if ($colspan) {
+ if ($granularity eq 'Yes') {
+ $r->print(&Apache::loncommon::start_data_table_row('LC_data_table_dense LC_data_table_highlight').'
|
- '.&mt('All:').
+ '.&mt('All:').
' ');
- foreach my $tool (@{$available}) {
- $r->print(' | | ');
+ ' value="'.$tool.'" />'.''.$tool.' ');
}
+ $r->print('');
}
- my %Sortby = ();
- foreach my $user (sort(keys(%current))) {
- if ($env{'form.sortby'} eq 'fullname') {
- push(@{$Sortby{$current{$user}{fullname}}},$user);
- } elsif ($env{'form.sortby'} eq 'username') {
- push(@{$Sortby{$current{$user}{uname}}},$user);
- } elsif ($env{'form.sortby'} eq 'domain') {
- push(@{$Sortby{$current{$user}{udom}}},$user);
- } elsif ($env{'form.sortby'} eq 'id') {
- push(@{$Sortby{$current{$user}{id}}},$user);
- } else {
- push(@{$Sortby{$current{$user}{fullname}}},$user);
- }
+ }
+ my %Sortby = ();
+ foreach my $user (sort(keys(%{$current}))) {
+ if ($env{'form.sortby'} eq 'fullname') {
+ push(@{$Sortby{$$current{$user}{fullname}}},$user);
+ } elsif ($env{'form.sortby'} eq 'username') {
+ push(@{$Sortby{$$current{$user}{uname}}},$user);
+ } elsif ($env{'form.sortby'} eq 'domain') {
+ push(@{$Sortby{$$current{$user}{udom}}},$user);
+ } elsif ($env{'form.sortby'} eq 'id') {
+ push(@{$Sortby{$$current{$user}{id}}},$user);
+ } else {
+ push(@{$Sortby{$$current{$user}{fullname}}},$user);
}
- my $rowNum = 0;
- my $rowColor;
- foreach my $key (sort(keys(%Sortby))) {
- foreach my $user (@{$Sortby{$key}}) {
- if ($rowNum %2 == 1) {
- $rowColor = $rowColor1;
- } else {
- $rowColor = $rowColor2;
- }
- my $id = $current{$user}{id};
- my $fullname = $current{$user}{fullname};
- my $udom = $current{$user}{udom};
- my $uname = $current{$user}{uname};
- my $start = $current{$user}{start};
- my $end = $current{$user}{end};
- $r->print('
- ');
- if ($current{$user}{changestate} eq 'reenable') {
- $r->print(''.
+ }
+ foreach my $key (sort(keys(%Sortby))) {
+ foreach my $user (@{$Sortby{$key}}) {
+ my $id = $$current{$user}{id};
+ my $fullname = $$current{$user}{fullname};
+ my $udom = $$current{$user}{udom};
+ my $uname = $$current{$user}{uname};
+ my $start = $$current{$user}{start};
+ my $end = $$current{$user}{end};
+ $r->print(&Apache::loncommon::start_data_table_row('LC_data_table_dense').'
+ ');
+ if ($$current{$user}{changestate} eq 'reenable') {
+ $r->print(''.
''.
$lt{'reen'}.' ');
- } elsif ($current{$user}{changestate} eq 'expire') {
- $r->print(''.
+ } elsif ($$current{$user}{changestate} eq 'expire') {
+ $r->print(''.
''.
$lt{'expi'}.' ');
- } elsif ($current{$user}{changestate} eq 'activate') {
- $r->print(''.
+ } elsif ($$current{$user}{changestate} eq 'activate') {
+ $r->print(''.
''.
$lt{'acti'}.' ');
- }
- $r->print(''.
+ }
+ $r->print(''.
''.
$lt{'dele'}.'');
- if ($specificity eq 'Yes') {
- $r->print(' '.
+ if ($specificity eq 'Yes') {
+ $r->print(' '.
''.$lt{'chpr'}.
'');
- }
- $r->print('
- |
- '.
- $fullname.' | '.$uname.' | '.
- $udom.' | '.$id.' | '.$start.
- ' | '.$end.' | ');
- if ($hastools) {
- $r->print(''.
+ }
+ $r->print('
+ | '.
+ ''.$fullname.' | '.
+ ''.$uname.' | '.
+ ''. $udom.' | '.
+ ''.$id.' | '.
+ ''.$start.' | '.
+ ''.$end.' | ');
+ if ($hastools) {
+ $r->print(''.
' ');
- foreach my $tool (@{$current{$user}{currtools}}) {
- if ($granularity eq 'Yes') {
- $r->print('print(''.$tool.'');
- } else {
- $r->print('print(''.$tool);
- }
- $r->print(' ');
- }
- $r->print(' | ');
+ }
+ $r->print(' ');
}
- if ($addtools) {
- $r->print('');
- if ($granularity eq 'Yes') {
- foreach my $tool (@{$current{$user}{newtools}}) {
- $r->print('print(' | ');
+ }
+ if ($addtools) {
+ $r->print('');
+ if ($granularity eq 'Yes') {
+ foreach my $tool (@{$$current{$user}{newtools}}) {
+ $r->print(''.$tool.
' ');
- }
- } else {
- foreach my $tool (@{$current{$user}{newtools}}) {
- $r->print('print(''.$tool.
' ');
- }
}
- $r->print(' | ');
}
- $r->print(' | '."\n");
- $rowNum ++;
+ $r->print('');
}
+ $r->print(&Apache::loncommon::end_data_table_row()."\n");
}
- $r->print(&Apache::lonhtmlcommon::end_pick_box());
- $r->print('
-
- ');
}
+ $r->print(&Apache::loncommon::end_data_table());
}
return;
}
@@ -2338,32 +2257,32 @@ sub check_uncheck_buttons {
my ($r,$formname,$field,$title,$colspan) = @_;
$r->print('
-
+
|
');
}
sub change_privs_form {
- my ($r,$cdom,$cnum,$tabcol,$action,$formname,$page,$startdate,$enddate,
- $tools,$functions,$toolprivs,$fixedprivs,$userdata,$usertools,
- $memchg,$idx,$states,$stored,$sectioncount,$navbuttons,$rowColor1,
- $rowColor2) = @_;
+ my ($r,$cdom,$cnum,$action,$formname,$page,$startdate,$enddate,
+ $tools,$functions,$toolprivs,$fixedprivs,$userdata,$usertools,
+ $memchg,$idx,$states,$stored,$sectioncount,$navbuttons,$gpterm,
+ $ucgpterm) = @_;
my @regexps = ('userpriv_');
my $nexttext;
my %lt = &Apache::lonlocal::texthash(
'tode' => 'To be deleted',
'toex' => 'To be expired',
- 'nome' => 'No members to be deleted or expired from the group.',
+ 'nome' => "No members to be deleted or expired from the $gpterm.",
);
$r->print(&Apache::lonhtmlcommon::echo_form_input(
['origin','action','state','page','sortby'],\@regexps));
@@ -2372,43 +2291,40 @@ sub change_privs_form {
} else {
$nexttext = $$navbuttons{'mose'};
}
- $r->print('
');
- &topic_bar($r,$tabcol,3,&mt('Members to delete or expire'));
+ &topic_bar($r,3,&mt('Members to delete or expire'));
my $exp_or_del = 0;
if (ref($$memchg{'deletion'}) eq 'ARRAY') {
if (@{$$memchg{'deletion'}} > 0) {
- $r->print(' | '.$lt{'tode'}.':
');
+ $r->print(''.$lt{'tode'}.':
');
foreach my $user (@{$$memchg{'deletion'}}) {
$r->print('- '.$$userdata{$user}[$$idx{fullname}].
' ('.$user.')
');
}
- $r->print(' | | ');
+ $r->print('');
$exp_or_del += @{$$memchg{'deletion'}};
}
}
if (ref($$memchg{'expire'}) eq 'ARRAY') {
if (@{$$memchg{'expire'}} > 0) {
- $r->print(' | '.$lt{'toex'}.':
');
+ $r->print(''.$lt{'toex'}.':
');
foreach my $user (@{$$memchg{'expire'}}) {
$r->print('- '.$$userdata{$user}[$$idx{fullname}].
' ('.$user.')
');
}
- $r->print(' | | ');
+ $r->print('');
$exp_or_del += @{$$memchg{'expire'}};
}
}
if (!$exp_or_del) {
- $r->print(' | '.$lt{'nome'}.
- ' | | ');
+ $r->print($lt{'nome'}.' ');
}
- &topic_bar($r,$tabcol,4,&mt('Group member privileges'));
+ &topic_bar($r,4,&mt('[_1] member privileges',$ucgpterm));
- my $numchgs = &member_privileges_form($r,$tabcol,$action,$formname,$tools,
+ my $numchgs = &member_privileges_form($r,$action,$formname,$tools,
$toolprivs,$fixedprivs,$userdata,
$usertools,$idx,$memchg,$states,
- $stored,$rowColor1,$rowColor2);
- $r->print(' | ');
+ $stored,$gpterm);
my $prevtext = $$navbuttons{'gtps'};
if ($numchgs || $exp_or_del) {
&display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext,
@@ -2416,47 +2332,33 @@ sub change_privs_form {
} else {
&display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext);
}
- $r->print(' ');
return;
}
sub add_members_form {
- my ($r,$tabcol,$action,$formname,$page,$startdate,$enddate,$groupname,
- $description,$granularity,$sectioncount,$tools,$functions,$stored,
- $states,$navbuttons,$rowColor1,$rowColor2) = @_;
- $r->print('
-
-
- |
-
-');
+ my ($r,$action,$formname,$page,$startdate,$enddate,$groupname,
+ $description,$granularity,$quota,$sectioncount,$tools,$functions,
+ $stored,$states,$navbuttons,$gpterm,$ucgpterm)=@_;
+ $r->print(' ');
my @available = ();
my @unavailable = ();
&check_tools($functions,$tools,\@available,\@unavailable);
- &print_current_settings($r,$action,$tabcol,$rowColor1,$rowColor2,
- $functions,$startdate,$enddate,$groupname,
- $description,$granularity,\@available,\@unavailable);
- $r->print('
- |
-
-
- |
- ');
-
- &membership_options($r,$action,$formname,$tabcol,$sectioncount,1);
+ &print_current_settings($r,$action,$functions,$startdate,$enddate,
+ $groupname,$description,$granularity,$quota,
+ \@available,\@unavailable,$gpterm,$ucgpterm);
+ &membership_options($r,$action,$formname,$sectioncount,1,$gpterm,$ucgpterm);
my $nexttext = $$navbuttons{'gtns'};
my $prevtext = $$navbuttons{'gtpp'};
&display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext,
$$states{$action}[$page+1],$nexttext);
- $r->print('
- ');
return;
}
sub choose_privs_form {
- my ($r,$cdom,$cnum,$tabcol,$action,$formname,$page,$startdate,$enddate,
- $tools,$functions,$toolprivs,$fixedprivs,$userdata,$usertools,$idx,
- $states,$stored,$sectioncount,$navbuttons,$rowColor1,$rowColor2) = @_;
+ my ($r,$cdom,$cnum,$action,$formname,$page,$startdate,$enddate,
+ $tools,$functions,$toolprivs,$fixedprivs,$userdata,$usertools,$idx,
+ $states,$stored,$sectioncount,$navbuttons,$gpterm,$ucgpterm,
+ $crstype) = @_;
my @regexps = ('userpriv_');
my $nexttext;
@@ -2473,27 +2375,24 @@ sub choose_privs_form {
$nexttext = $$navbuttons{'adme'};
}
- $r->print('
');
- &topic_bar($r,$tabcol,6,&mt('Group member privileges'));
+ &topic_bar($r,6,&mt('[_1] member privileges',$ucgpterm));
- &member_privileges_form($r,$tabcol,$action,$formname,$tools,$toolprivs,
+ &member_privileges_form($r,$action,$formname,$tools,$toolprivs,
$fixedprivs,$userdata,$usertools,$idx,undef,
- $states,$stored,$rowColor1,$rowColor2);
+ $states,$stored,$gpterm);
- $r->print(' | ');
if ($action eq 'create') {
if (keys(%{$sectioncount}) > 0) {
my $img1 = 7;
my $img2 = 8;
- &mapping_options($r,$action,$formname,$page,$tabcol,$sectioncount,
+ &mapping_options($r,$action,$formname,$page,$sectioncount,
$states,$stored,$navbuttons,$img1,$img2,
- $rowColor1,$rowColor2);
+ $gpterm,$ucgpterm,$crstype);
}
}
my $prevtext = $$navbuttons{'gtps'};
&display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext,
$$states{$action}[$page+1],$nexttext);
- $r->print(' ');
return;
}
@@ -2556,8 +2455,8 @@ function uncheckAllTools(formname) {
}
sub member_privileges_form {
- my ($r,$tabcol,$action,$formname,$tools,$toolprivs,$fixedprivs,$userdata,
- $usertools,$idx,$memchg,$states,$stored,$rowColor1,$rowColor2) = @_;
+ my ($r,$action,$formname,$tools,$toolprivs,$fixedprivs,$userdata,
+ $usertools,$idx,$memchg,$states,$stored,$gpterm) = @_;
my %lt = &Apache::lonlocal::texthash(
'addp' => 'Additional privileges',
'fixp' => 'Fixed privileges',
@@ -2566,15 +2465,15 @@ sub member_privileges_form {
'forf' => 'For the functionality you have chosen to include '.
'there are no optional privileges to set besides '.
'the standard privileges.',
- 'algr' => 'All group members will receive the same privileges.',
- 'asno' => 'As no group members are being added, '.
- 'there are no specific user privileges to set.',
- 'asng' => 'As no group tools will be made available to users, '.
- 'there are no specific user privileges to set.',
- 'nogm' => 'No group member privileges to display or set, '.
- 'as you have not indicated that you will be activating,'.
- ' re-enabling, changing privileges, or adding/removing '.
- 'functionality for any current members ',
+ 'algr' => "All $gpterm members will receive the same privileges.",
+ 'asno' => "As no $gpterm members are being added, ".
+ "there are no specific user privileges to set.",
+ 'asng' => "As no $gpterm tools will be made available to users, ".
+ "there are no specific user privileges to set.",
+ 'nogm' => "No $gpterm member privileges to display or set, ".
+ "as you have not indicated that you will be activating,".
+ " re-enabling, changing privileges, or adding/removing ".
+ "functionality for any current members ",
'full' => 'Fullname',
'user' => 'Username',
'doma' => 'Domain',
@@ -2587,7 +2486,9 @@ sub member_privileges_form {
}
$specificity = $env{'form.specificity'};
} else {
- @defprivs = @{$$stored{'defpriv'}};
+ if (defined($$stored{'defpriv'})) {
+ @defprivs = @{$$stored{'defpriv'}};
+ }
$specificity = $$stored{'specificity'};
}
my @showtools;
@@ -2616,7 +2517,7 @@ sub member_privileges_form {
}
$numchgs = @currmembers;
if (!$numchgs) {
- $r->print(' | '.$lt{'nogm'});
+ $r->print($lt{'nogm'});
return $numchgs;
}
}
@@ -2632,17 +2533,14 @@ sub member_privileges_form {
my %total;
if (keys(%{$usertools}) > 1) {
$r->print('
- |
- |
-
-
+
');
foreach my $tool (@{$tools}) {
if (@{$showboxes{$tool}} > 0) {
$r->print('');
- $r->print(''.
+ $r->print(''.
+ ''.
$tool.' | ');
my $privcount = 0;
foreach my $priv (@{$showboxes{$tool}}) {
@@ -2680,64 +2578,50 @@ sub member_privileges_form {
$r->print('
| | ');
}
}
- $r->print('
---|
| ');
- $r->print(' | ');
+ $r->print(' ');
}
- $r->print(' | ');
- $r->print(&Apache::lonhtmlcommon::start_pick_box());
+ $r->print(&Apache::loncommon::start_data_table().
+ &Apache::loncommon::start_data_table_header_row());
$r->print(<<"END");
- |
- $lt{'full'} |
- $lt{'user'} |
+ $lt{'full'} |
+ $lt{'user'} |
$lt{'doma'} |
$lt{'addp'} |
-
END
- &member_privs_entries($r,$tabcol,$rowColor1,$rowColor2,
- $usertools,$toolprivs,$fixedprivs,
+ $r->print(&Apache::loncommon::end_data_table_header_row());
+ &member_privs_entries($r,$usertools,$toolprivs,$fixedprivs,
$userdata,$idx,\@showtools,\@defprivs,
\@excluded);
- $r->print('');
- $r->print(&Apache::lonhtmlcommon::end_pick_box());
- $r->print('
-
- |
-
-');
+ $r->print(&Apache::loncommon::end_data_table());
} else {
- $r->print(' | '.$lt{'forf'}.
- ' ');
- &display_defprivs($r,$tabcol,$rowColor1,$rowColor2,$tools,
- $toolprivs,\@defprivs);
-
+ $r->print($lt{'forf'}.' ');
+ &display_defprivs($r,$tools,$toolprivs,\@defprivs);
}
} else {
if (keys(%{$usertools}) > 0) {
- $r->print(' | | '.$lt{'algr'}.
- '
');
- &display_defprivs($r,$tabcol,$rowColor1,$rowColor2,$tools,
- $toolprivs,\@defprivs);
+ $r->print($lt{'algr'}.'
');
+ &display_defprivs($r,$tools,$toolprivs,\@defprivs);
} else {
- $r->print(' | | '.$lt{'asno'}.
- ' ');
+ $r->print($lt{'asno'}.' ');
}
}
} else {
- $r->print(' | | '.$lt{'asng'});
+ $r->print($lt{'asng'});
}
return $numchgs;
}
sub process_request {
- my ($r,$cdom,$cnum,$tabcol,$action,$state,$page,$groupname,$description,
+ my ($r,$cdom,$cnum,$action,$state,$page,$groupname,$description,
$specificity,$userdata,$startdate,$enddate,$tools,$functions,$toolprivs,
$usertools,$idx,$types,$roles,$sections,$states,$navbuttons,$memchg,
- $sectioncount,$stored,$rowColor1,$rowColor2) = @_;
+ $sectioncount,$stored,$gpterm,$ucgpterm,$crstype) = @_;
$r->print(&Apache::lonhtmlcommon::echo_form_input(
['origin','action','state','page','sortby']));
- my $earlyout = &validate_groupname($groupname,$action,$cdom,$cnum);
+ my $earlyout = &validate_groupname($groupname,$action,$cdom,$cnum,$gpterm,
+ $ucgpterm,$crstype);
if ($earlyout) {
$r->print('
@@ -2772,7 +2656,9 @@ sub process_request {
@defprivs = @temp;
}
} else {
- @defprivs = @{$$stored{'defpriv'}};
+ if (defined($$stored{'defpriv'})) {
+ @defprivs = @{$$stored{'defpriv'}};
+ }
}
my $outcome;
@@ -2781,13 +2667,15 @@ sub process_request {
$description,$startdate,$enddate,
$specificity,$functions,$tools,
$sectioncount,$roles,$types,$sections,
- \@defprivs,$stored);
+ \@defprivs,$stored,$gpterm,$ucgpterm,
+ $crstype);
}
if (($action eq 'create' && $outcome eq 'ok') || (($action eq 'modify') &&
(($state eq 'memresult') || ($state eq 'addresult')))) {
&process_membership($r,$cdom,$cnum,$action,$state,$groupname,$tools,
$enddate,$startdate,$userdata,$idx,$toolprivs,
- $usertools,$specificity,\@defprivs,$memchg);
+ $usertools,$specificity,\@defprivs,$memchg,$gpterm,
+ $ucgpterm);
}
return;
}
@@ -2795,7 +2683,7 @@ sub process_request {
sub write_group_data {
my ($r,$cdom,$cnum,$action,$state,$groupname,$description,$startdate,
$enddate,$specificity,$functions,$tools,$sectioncount,$roles,$types,
- $sections,$defprivs,$stored) = @_;
+ $sections,$defprivs,$stored,$gpterm,$ucgpterm,$crstype) = @_;
my $now = time;
my $creation = $now;
my $creator = $env{'user.name'}.':'.$env{'user.domain'};
@@ -2803,12 +2691,28 @@ sub write_group_data {
$creation = $$stored{'creation'};
$creator = $$stored{'creator'};
}
- my $esc_description = &Apache::lonnet::escape($description);
+ my $esc_description = &escape($description);
my @single_attributes = ('description','functions','startdate','enddate',
'creation','modified','creator','granularity',
- 'specificity','autoadd','autodrop');
+ 'specificity','autoadd','autodrop','quota');
my @mult_attributes = ('roles','types','sectionpick','defpriv');
-
+
+ my ($crsquota,$freespace,$maxposs) = &get_quota_constraints($action,
+ $stored);
+ my $quota = $env{'form.quota'};
+
+ $quota =~ s/^\s*([^\s]*)\s*$/$1/;
+ if ($quota eq '') {
+ $quota = 0;
+ }
+ if ($quota !~ /^\d*\.?\d*$/) {
+ $quota = 0;
+ $r->print(&mt('The value you entered for the quota for the file repository in this [_1] contained invalid characters, so it has been set to 0 Mb. You can change this by modifying the [_1] settings. ',$gpterm));
+ }
+ if ($quota > $maxposs) {
+ $quota = $maxposs;
+ $r->print(&mt('The value you entered for the quota for the file repository in this [_1] exceeded the maximum possible value, so it has been set to [_2] Mb (the maximum possible value). ',$gpterm,$maxposs));
+ }
my %groupinfo = (
description => $esc_description,
startdate => $startdate,
@@ -2820,7 +2724,9 @@ sub write_group_data {
specificity => $specificity,
autoadd => $env{'form.autoadd'},
autodrop => $env{'form.autodrop'},
+ quota => $quota,
);
+
foreach my $func (keys(%{$functions})) {
my $status;
if (grep(/^$func$/,@{$tools})) {
@@ -2847,14 +2753,11 @@ sub write_group_data {
}
my $autosec;
my @autorole = &Apache::loncommon::get_env_multiple('form.autorole');
-
+
foreach my $role (@autorole) {
if (defined($env{'form.sec_'.$role})) {
my @autosections=&Apache::loncommon::get_env_multiple('form.sec_'.
$role);
- if (grep/^_all$/,@autosections) {
- @autosections = sort {$a cmp $b} keys(%{$sectioncount});
- }
$autosec .= '';
foreach my $sec (@autosections) {
$autosec .= '';
@@ -2870,34 +2773,43 @@ sub write_group_data {
if ($result eq 'ok') {
if ($action eq 'create') {
- my $put_result = &create_homepage($cdom,$cnum,$groupname,
- \%groupinfo,$tools);
- $r->print('Group '.$groupname.' was created. ');
+ my $result = &add_group_folder($cdom,$cnum,$now,$groupname,$action,
+ $description,$tools,\%groupinfo,
+ $gpterm,$ucgpterm,$crstype);
+ if ($result ne 'ok') {
+ $r->print(&mt('A problem occurred when creating folders for the new [_1]. [_2]. ',$gpterm,$result));
+ }
+ $r->print(&mt('[_1] [_2] was created. ',$ucgpterm,$groupname));
} else {
- $r->print('Group '.$groupname.' was updated. ');
+ $r->print(&mt('[_1] [_2] was updated. ',$ucgpterm,$groupname));
}
} else {
my %actiontype = (
'create' => 'creating',
'modify' => 'modifying',
);
- &Apache::lonnet::logthis('Failed to store group '.$groupname.
- 'in course: '.$cnum.' in domain: '.$cdom);
- $r->print(&mt('An error occurred when [_1] the new group. '.
- 'Please try again.',$actiontype{$action}));
+ &Apache::lonnet::logthis("Failed to store $gpterm $groupname ".
+ 'in '.lc($crstype).': '.$cnum.
+ ' in domain: '.$cdom);
+ $r->print(&mt('An error occurred when [_1] the [_2]. '.
+ 'Please try again.',$actiontype{$action},$gpterm));
}
return $result;
}
sub process_membership {
my ($r,$cdom,$cnum,$action,$state,$groupname,$tools,$enddate,$startdate,
- $userdata,$idx,$toolprivs,$usertools,$specificity,$defprivs,$memchg)=@_;
+ $userdata,$idx,$toolprivs,$usertools,$specificity,$defprivs,$memchg,
+ $gpterm,$ucgpterm)=@_;
my %usersettings = ();
my %added= ();
my %failed = ();
my $num_ok = 0;
my $num_fail = 0;
my %group_privs = ();
+ my %curr_privs = ();
+ my %curr_start = ();
+ my %curr_end = ();
my %tooltype = ();
foreach my $tool (@{$tools}) {
@@ -2916,7 +2828,7 @@ sub process_membership {
}
} else {
if (@{$defprivs} > 0) {
- foreach my $priv (@{$defprivs}) {
+ if (grep/^\Q$priv\E$/,@{$defprivs}) {
foreach my $user (sort(keys(%{$usertools}))) {
if ($$usertools{$user}{$tool}) {
$group_privs{$user} .= $priv.':';
@@ -2936,6 +2848,7 @@ sub process_membership {
my @expire = ();
my @deletion = ();
my @reenable = ();
+ my @unchanged = ();
if ($state eq 'memresult') {
if (ref($$memchg{'activate'}) eq 'ARRAY') {
@activate = @{$$memchg{'activate'}};
@@ -2949,21 +2862,25 @@ sub process_membership {
if (ref($$memchg{'reenable'}) eq 'ARRAY') {
@reenable = @{$$memchg{'reenable'}};
}
+ my %membership = &Apache::lonnet::get_group_membership($cdom,$cnum,
+ $groupname);
+ foreach my $key (sort(keys(%membership))) {
+ if ($key =~ /^\Q$groupname\E:([^:]+:[^:]+)$/) {
+ ($curr_end{$1},$curr_start{$1},$curr_privs{$1}) =
+ split(/:/,$membership{$key},3);
+ }
+ }
if (@expire + @deletion > 0) {
- my %membership = &Apache::lonnet::get_group_membership($cdom,$cnum,
- $groupname);
foreach my $user (@expire) {
- my ($currend,$currstart,@userprivs) =
- split(/:/,$membership{$groupname.':'.$user});
- $group_privs{$user} = join(':',@userprivs);
- if ($currstart > $now) {
- $currstart = $now;
+ my $savestart = $curr_start{$user};
+ if ($savestart > $now) {
+ $savestart = $now;
}
- $usersettings{$groupname.':'.$user} = $now.':'.$currstart.':'.
- $group_privs{$user};
+ $usersettings{$groupname.':'.$user} = $now.':'.$savestart.':'.
+ $curr_privs{$user};
if (&Apache::lonnet::modify_group_roles($cdom,$cnum,$groupname,
- $user,$now,$currstart,
- $group_privs{$user}) eq 'ok') {
+ $user,$now,$savestart,
+ $curr_privs{$user}) eq 'ok') {
push(@{$added{'expired'}},$user);
$num_ok ++;
} else {
@@ -2987,22 +2904,40 @@ sub process_membership {
}
foreach my $user (sort(keys(%{$usertools}))) {
+ if ((grep(/^$user$/,@expire)) || (grep(/^$user$/,@deletion))) {
+ next;
+ }
my $type;
my $start = $startdate;
my $end = $enddate;
if ($state eq 'memresult') {
- $type = 'modified';
if (@activate > 0) {
if (grep/^$user$/,@activate) {
$start = $now;
+ $end = $enddate;
$type = 'activated';
}
}
if (@reenable > 0) {
if (grep/^$user$/,@reenable) {
+ $start = $startdate;
+ $end = $enddate;
$type = 'reenabled';
}
}
+ if ($type eq '') {
+ if ($curr_privs{$user} eq $group_privs{$user}) {
+ push(@unchanged,$user);
+ next;
+ }
+ if (exists($curr_start{$user})) {
+ $start = $curr_start{$user};
+ }
+ if (exists($curr_end{$user})) {
+ $end = $curr_end{$user};
+ }
+ $type = 'modified';
+ }
} else {
$type = 'added';
}
@@ -3023,7 +2958,7 @@ sub process_membership {
if ($num_ok) {
foreach my $type (sort(keys(%added))) {
$r->print(&mt('The following users were successfully [_1]',$type));
- if (!($type eq 'deleted' || $type eq 'expired')) {
+ if (!($type eq 'deleted' || $type eq 'expired')) {
$r->print(&mt(' with the following privileges'));
}
$r->print(': ');
@@ -3044,6 +2979,7 @@ sub process_membership {
}
$r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.$privlist.' ');
}
+ $r->print(' ');
}
}
if ($num_fail) {
@@ -3053,45 +2989,49 @@ sub process_membership {
$r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.' ');
}
}
+ $r->print(' ');
+ }
+ if (@unchanged > 0) {
+ $r->print(&mt('No change occurred for the following users: '));
+ foreach my $user (sort(@unchanged)) {
+ $r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.' ');
+ }
+ $r->print(' ');
}
if ($roster_result eq 'ok') {
- $r->print(' Group membership list updated.');
+ $r->print(' '.&mt('[_1] membership list updated.',$ucgpterm));
+ $r->print(''.&mt("For full access to all of [_1]'s privileges, users will need to log out and log back in.",$groupname).' ');
} else {
- $r->print(' An error occurred while updating the group membership list -'.$roster_result.' ');
+ $r->print(' '.&mt('An error occurred while updating the [_1] membership list -',$gpterm).$roster_result.' ');
}
return;
}
sub mapping_options {
- my ($r,$action,$formname,$page,$tabcol,$sectioncount,$states,$stored,
- $navbuttons,$img1,$img2,$rowColor1,$rowColor2) = @_;
+ my ($r,$action,$formname,$page,$sectioncount,$states,$stored,
+ $navbuttons,$img1,$img2,$gpterm,$ucgpterm,$crstype) = @_;
my %lt = &Apache::lonlocal::texthash(
- 'auto' => 'Settings for automatic group enrollment',
- 'gmma' => 'Group membership mapping to specific sections/roles',
- 'endi' => 'Enable/disable automatic group enrollment for '.
- 'users in specified roles and sections',
- 'adds' => 'If automatic group enrollment is enabled, when a user is assigned a course-wide or section-specific role, he/she will automatically be added as a member of the group, with start and end access dates defined by the default dates set for the group, unless he/she is already a group member, with access dates that permit either current or future group access.',
- 'drops' => "If automatic group disenrollment is enabled, when a user's role is expired, access to the group will be terminated unless the user continues to have other course-wide or section-specific active or future roles which receive automatic membership in the group.",
- 'pirs' => 'Pick roles and sections for automatic group enrollment',
+ 'auto' => "Settings for automatic $gpterm enrollment",
+ 'gmma' => "$ucgpterm membership mapping to specific sections/roles",
+ 'endi' => "Enable/disable automatic $gpterm enrollment for ".
+ "users in specified roles and sections",
+ 'adds' => "If automatic $gpterm enrollment is enabled, when a user is assigned a ".lc($crstype)."-wide or section-specific role, he/she will automatically be added as a member of the $gpterm, with start and end access dates defined by the default dates set for the $gpterm, unless he/she is already a $gpterm member, with access dates that permit either current or future $gpterm access.",
+ 'drops' => "If automatic $gpterm disenrollment is enabled, when a user's role is expired, access to the $gpterm will be terminated unless the user continues to have other ".lc($crstype)."-wide or section-specific active or future roles which receive automatic membership in the $gpterm.",
+ 'pirs' => "Pick roles and sections for automatic $gpterm enrollment",
'curr' => 'Currently set to',
'on' => 'on',
'off' => 'off',
- 'auad' => 'Automatically enable group membership when roles are added?',
- 'auex' => 'Automatically expire group membership when roles are removed?',
- 'mapr' => 'Mapping of roles and sections affected by automatic group enrollment/disenrollment follows scheme chosen below.',
+ 'auad' => "Automatically enable $gpterm membership when roles are added?",
+ 'auex' => "Automatically expire $gpterm membership when roles are removed?",
+ 'mapr' => "Mapping of roles and sections affected by automatic $gpterm enrollment/disenrollment follows scheme chosen below.",
);
- &automapping($r,$action,$tabcol,$stored,\%lt,$img1);
- $r->print('
-
- |
- ');
- &mapping_settings($r,$tabcol,$rowColor1,$rowColor2,$sectioncount,\%lt,
- $stored,$img2);
+ &automapping($r,$action,$stored,\%lt,$img1);
+ &mapping_settings($r,$sectioncount,\%lt,$stored,$img2,$crstype);
return;
}
sub automapping {
- my ($r,$action,$tabcol,$stored,$lt,$image) = @_;
+ my ($r,$action,$stored,$lt,$image) = @_;
my $add = 'off';
my $drop = 'off';
if (exists($$stored{'autoadd'})) {
@@ -3100,116 +3040,82 @@ sub automapping {
if (exists($$stored{'autodrop'})) {
$drop = $$stored{'autodrop'};
}
- &topic_bar($r,$tabcol,$image,$$lt{'endi'});
+ &topic_bar($r,$image,$$lt{'endi'});
$r->print('
-
- |
-
- '.$$lt{'gmma'}.': '.$$lt{'adds'}.' '.$$lt{'drops'}.'
- |
-
-
- |
-
-
- |
-
+ '.$$lt{'gmma'}.': '.$$lt{'adds'}.' '.$$lt{'drops'}.'
'.$$lt{'auad'}.':
- on off');
+ on off');
if ($action eq 'modify') {
$r->print(' ('.$$lt{'curr'}.' '.$$lt{$add}.')');
}
$r->print('
-
- |
-
-
- |
-
+
'.$$lt{'auex'}.':
- on off');
+ on off');
if ($action eq 'modify') {
$r->print(' ('.$$lt{'curr'}.' '.$$lt{$drop}.')');
}
- $r->print('
- |
-
-
- |
-
-
- |
- '.$$lt{'mapr'}.'
- |
-
-');
+ $r->print('
'.$$lt{'mapr'});
}
sub mapping_settings {
- my ($r,$tabcol,$rowColor1,$rowColor2,$sectioncount,$lt,$stored,$image) = @_;
+ my ($r,$sectioncount,$lt,$stored,$image,$crstype) = @_;
my @sections = keys(%{$sectioncount});
if (@sections > 0) {
@sections = sort {$a cmp $b} @sections;
- unshift(@sections,'_nosec'); # Put 'no sections' next
- unshift(@sections,'_all'); # Put 'all' at the front of the list
+ unshift(@sections,'none'); # Put 'no sections' next
+ unshift(@sections,'all'); # Put 'all' at the front of the list
}
- &topic_bar($r,$tabcol,$image,$$lt{'pirs'});
- $r->print('
-
- |
-
-');
+ &topic_bar($r,$image,$$lt{'pirs'});
my @roles = &standard_roles();
my %customroles = &my_custom_roles();
- $r->print(&Apache::lonhtmlcommon::start_pick_box());
+ $r->print(&Apache::loncommon::start_data_table().
+ &Apache::loncommon::start_data_table_header_row());
$r->print('
- |
'.&mt('Active?').' |
'.&mt('Role').' | ');
if (@sections > 0) {
- $r->print(''.&mt('Sections').' | '."\n");
+ $r->print(''.&mt('Sections').' | ');
}
- my $rowNum = 0;
- my $rowColor;
+ $r->print(&Apache::loncommon::end_data_table_header_row()."\n");
foreach my $role (@roles) {
- my $plrole=&Apache::lonnet::plaintext($role);
+ my $plrole=&Apache::lonnet::plaintext($role,$crstype);
my $sections_sel;
if (@sections > 0) {
- $sections_sel=''.§ions_selection(\@sections,'sec_'.$role).
- ' | ';
- }
- if ($rowNum %2 == 1) {
- $rowColor = $rowColor1;
- } else {
- $rowColor = $rowColor2;
+ if ($role eq 'cc') {
+ $sections_sel = ''.
+ &mt('all sections').' | ';
+ } else {
+ $sections_sel=''.
+ §ions_selection(\@sections,'sec_'.$role).
+ ' | ';
+ }
}
- $r->print(' | '.$plrole.
- ' | '.$sections_sel.' ');
- $rowNum ++;
+ $r->print(&Apache::loncommon::start_data_table_row().
+ ' | '.$plrole.
+ ' | '.$sections_sel.
+ &Apache::loncommon::end_data_table_row());
}
foreach my $role (sort(keys(%customroles))) {
my $sections_sel;
if (@sections > 0) {
- $sections_sel = ''.§ions_selection(\@sections,'sec_'.$role).
- ' | ';
- }
- if ($rowNum %2 == 1) {
- $rowColor = $rowColor1;
- } else {
- $rowColor = $rowColor2;
+ $sections_sel =
+ ''.§ions_selection(\@sections,'sec_'.$role).' | ';
}
- $r->print(' | '.$role.' | '.
- $sections_sel.' ');
- $rowNum ++;
+ $r->print(&Apache::loncommon::start_data_table_row().
+ ' | '.$role.' | '.
+ $sections_sel.
+ &Apache::loncommon::end_data_table_row());
}
- $r->print(&Apache::lonhtmlcommon::end_pick_box());
+ $r->print(&Apache::loncommon::end_data_table());
return;
}
sub standard_roles {
- my @roles = ('st','ep','ta','in','cc');
+ my @roles = ('cc','in','ta','ep','st');
return @roles;
}
@@ -3225,10 +3131,10 @@ sub my_custom_roles {
}
sub modify_menu {
- my ($r,$groupname,$page) = @_;
+ my ($r,$groupname,$page,$gpterm) = @_;
my @menu =
(
- { text => 'Modify default group settings',
+ { text => "Modify default $gpterm settings",
help => 'Course_Modify_Group',
state => 'change_settings',
branch => 'settings',
@@ -3239,7 +3145,7 @@ sub modify_menu {
state => 'change_members',
branch => 'members',
},
- { text => 'Add member(s) to the group',
+ { text => "Add member(s) to the $gpterm",
help => 'Course_Group_Add_Members',
state => 'add_members',
branch => 'adds',
@@ -3261,10 +3167,8 @@ sub modify_menu {
}
sub member_privs_entries {
- my ($r,$tabcol,$rowColor1,$rowColor2,$usertools,$toolprivs,
- $fixedprivs,$userdata,$idx,$showtools,$defprivs,$excluded) = @_;
- my $rowColor;
- my $rowNum = 0;
+ my ($r,$usertools,$toolprivs,$fixedprivs,$userdata,$idx,$showtools,
+ $defprivs,$excluded) = @_;
foreach my $user (sort(keys(%{$usertools}))) {
if (defined($excluded)) {
if (ref($excluded) eq 'ARRAY') {
@@ -3274,19 +3178,14 @@ sub member_privs_entries {
}
}
my ($uname,$udom) = split(/:/,$user);
- if ($rowNum %2 == 1) {
- $rowColor = $rowColor1;
- } else {
- $rowColor = $rowColor2;
- }
- $r->print('
+ $r->print(&Apache::loncommon::start_data_table_row().'
'.$$userdata{$user}[$$idx{fullname}].' |
'.$uname.' |
'.$udom.' |
| ');
foreach my $tool (@{$showtools}) {
if (exists($$usertools{$user}{$tool})) {
- $r->print(''.$tool.' | ');
+ $r->print(''.$tool.' | ');
my $privcount = 0;
my $fixed = '';
my $dynamic = '';
@@ -3309,10 +3208,10 @@ sub member_privs_entries {
}
$r->print(''.$fixed.' | '.$dynamic.'
| ');
} else {
- $r->print(' | ');
+ $r->print(' | ');
}
}
- $rowNum ++;
+ $r->print(&Apache::loncommon::end_data_table_row());
}
}
@@ -3333,40 +3232,189 @@ sub date_setting_table {
'startdate',$starttime);
my $endform = &Apache::lonhtmlcommon::date_setter($formname,
'enddate',$endtime);
- my $perpetual = '
- no ending date';
- my $start_table = '';
- $start_table .= "\n";
+ return $table;
+}
+
+sub add_group_folder {
+ my ($cdom,$cnum,$now,$groupname,$action,$description,$tools,$groupinfo,
+ $gpterm,$ucgpterm,$crstype) = @_;
+ if ($cdom eq '' || $cnum eq '') {
+ return &mt('Error: invalid course domain or number - group folder creation failed');
+ }
+ my ($outcome,$allgrpsmap,$grpmap,$boardsmap,$grppage);
+ my $navmap = Apache::lonnavmaps::navmap->new();
+ my $crspath = '/uploaded/'.$cdom.'/'.$cnum.'/';
+ $allgrpsmap = $crspath.'group_allfolders.sequence';
+ my $topmap = $navmap->getResourceByUrl($allgrpsmap);
+ undef($navmap);
+ if ($action eq 'create') {
+ # check if group_allfolders.sequence exists.
+ if (!$topmap) {
+ my $grpstitle = &mt('[_1] [_2]',$crstype,$ucgpterm);
+ my $topmap_url = '/'.$env{'course.'.$env{'request.course.id'}.'.url'};
+ $topmap_url =~ s|/+|/|g;
+ if ($topmap_url =~ m|^/uploaded|) {
+ $outcome = &map_updater($cdom,$cnum,'group_allfolders.sequence',
+ 'toplevelgroup',$grpstitle,$topmap_url);
+ if ($outcome ne 'ok') {
+ return $outcome;
+ }
+ } else {
+ $outcome = &mt('Non-standard course - folder for all groups not added.');
+ return $outcome;
+ }
+ }
+ my $grpfolder = &mt('[_1] Folder -',$ucgpterm,).$description;
+ $grppage='/adm/'.$cdom.'/'.$cnum.'/'.$groupname.'/smppg';
+ my $grptitle = &mt('Group homepage').' - '.$description;
+ my ($seqid,$discussions,$disctitle);
+ my $outcome = &map_updater($cdom,$cnum,'group_folder_'.$groupname.'.sequence',
+ 'grpseq',$grpfolder,$allgrpsmap,$grppage,
+ $grptitle);
+ if ($outcome ne 'ok') {
+ return $outcome;
+ }
+ my $pageout = &create_homepage($cdom,$cnum,$groupname,$groupinfo,
+ $tools,$gpterm,$ucgpterm,$now);
+ # Link to folder for bulletin boards
+ $grpmap = $crspath.'group_folder_'.$groupname.'.sequence';
+ if (grep/^discussion$/,@{$tools}) {
+ $seqid = $now + 1;
+ $disctitle = &mt('Discussion Boards');
+ my $outcome = &map_updater($cdom,$cnum,'group_boards_'.$groupname.
+ '.sequence','bbseq',$disctitle,$grpmap);
+ if ($outcome ne 'ok') {
+ return $outcome;
+ }
+ $boardsmap = $crspath.'group_boards_'.$groupname.'.sequence';
+ }
+ } else {
+ #modify group folder if status of discussions tools is changed
+ }
+ my ($furl,$ferr)= &Apache::lonuserstate::readmap($cdom.'/'.$cnum);
+ $navmap = Apache::lonnavmaps::navmap->new();
+ # modify parameters
+ my $parm_result;
+ if ($action eq 'create') {
+ if ($allgrpsmap) {
+ $parm_result .= &parm_setter($navmap,$cdom,$allgrpsmap,$groupname);
+ }
+ if ($grpmap) {
+ $parm_result .= &parm_setter($navmap,$cdom,$grpmap,$groupname);
+ }
+ if ($grppage) {
+ $parm_result .= &parm_setter($navmap,$cdom,$grppage,$groupname);
+ }
+ if ($boardsmap) {
+ $parm_result .= &parm_setter($navmap,$cdom,$boardsmap,$groupname);
+ }
+ }
+ if ($parm_result) {
+ return $parm_result;
+ } else {
+ return 'ok';
+ }
+}
+
+sub map_updater {
+ my ($cdom,$cnum,$newfile,$itemname,$itemtitle,$parentmap,$startsrc,
+ $starttitle,$endsrc,$endtitle) = @_;
+ my $outcome;
+ $env{'form.'.$itemname} = &new_map($startsrc,$starttitle,$endsrc,
+ $endtitle);
+ my $newmapurl=&Apache::lonnet::finishuserfileupload($cnum,$cdom,$itemname,
+ $newfile);
+ if ($newmapurl !~ m|^/uploaded|) {
+ $outcome = &mt('Error uploading new folder.')." ($newfile): $newmapurl".' ';
+ return $outcome;
+ }
+ my ($errtext,$fatal)=&Apache::lonratedt::mapread($parentmap);
+ if ($fatal) {
+ $outcome = &mt('Error reading contents of parent folder')." ($parentmap): $errtext".' ';
+ return $outcome;
+ } else {
+ my $newidx=&Apache::lonratedt::getresidx($newmapurl);
+ $Apache::lonratedt::resources[$newidx] = $itemtitle.':'.$newmapurl.
+ ':false:normal:res';
+ $Apache::lonratedt::order[1+$#Apache::lonratedt::order]=$newidx;
+ my ($outtext,$errtext) = &Apache::lonratedt::storemap($parentmap,1);
+ if ($errtext) {
+ $outcome = &mt('Error storing updated parent folder')." ($parentmap): $errtext".' ';
+ return $outcome;
+ }
+ }
+ return 'ok';
+}
+
+sub new_map {
+ my ($startsrc,$starttitle,$endsrc,$endtitle) = @_;
+ my $newmapstr = '
+
+';
+ return $newmapstr;
+}
+
+sub parm_setter {
+ my ($navmap,$cdom,$url,$groupname) = @_;
+ my $allresults;
+ my %hide_settings = (
+ 'course' => {
+ 'num' => 13,
+ 'set' => 'yes',
+ },
+ 'group' => {
+ 'num' => 5,
+ 'set' => 'no',
+ 'extra' => $groupname,
+ },
+ );
+ my $res = $navmap->getResourceByUrl($url);
+ my $symb = $res->symb();
+ foreach my $level (keys(%hide_settings)) {
+ my $parmresult = &Apache::lonparmset::storeparm_by_symb($symb,
+ '0_hiddenresource',
+ $hide_settings{$level}{'num'},
+ $hide_settings{$level}{'set'},
+ 'string_yesno',undef,$cdom,
+ undef,undef,
+ $hide_settings{$level}{'extra'});
+ if ($parmresult) {
+ $allresults .= $level.': '.$parmresult;
+ }
+ }
+ return $allresults;
}
sub create_homepage {
- my ($cdom,$cnum,$name,$groupinfo,$tools) = @_;
+ my ($cdom,$cnum,$name,$groupinfo,$tools,$gpterm,$ucgpterm,$now) = @_;
my $functionality = join(',',@{$tools});
- my $content = &Apache::lonnet::unescape($$groupinfo{description});
+ my $content = &unescape($$groupinfo{description});
$content=~s/\s+$//s;
$content=~s/^\s+//s;
$content=~s/\ $//s;
$content=&Apache::lonfeedback::clear_out_html($content,1);
my %pageinfo = (
- 'aaa_title' => 'Group: '.$name,
+ 'aaa_title' => "$ucgpterm: $name",
'abb_links' => $functionality,
'bbb_content' => $content,
'ccc_webreferences' => '',
- 'uploaded.lastmodified' => time,
+ 'uploaded.lastmodified' => $now,
);
my $putresult = &Apache::lonnet::put('grppage_'.$name,\%pageinfo,$cdom,$cnum);
return $putresult;
@@ -3408,52 +3456,46 @@ function toggleTools(field,caller) {
}
sub validate_groupname {
- my ($groupname,$action,$cdom,$cnum) = @_;
- my %sectioncount;
- my $numsec=&Apache::loncommon::get_sections($cdom,$cnum,\%sectioncount);
- my %curr_groups;
- my $numgroups=&Apache::loncommon::coursegroups(\%curr_groups,$cdom,$cnum);
-
+ my ($groupname,$action,$cdom,$cnum,$gpterm,$ucgpterm,$crstype) = @_;
+ my %sectioncount = &Apache::loncommon::get_sections($cdom,$cnum);
+ my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum);
+
my %lt = &Apache::lonlocal::texthash (
- igna => 'Invalid group name',
- tgne => 'The group name entered ',
- grna => 'Group names and section names used in a course '.
- 'must be unique.',
- isno => 'is not a valid name.',
- gnmo => 'Group names may only contain letters, numbers '.
- 'or underscores.',
- cnnb => 'can not be used as it is the name of ',
- inth => ' in this course.',
- thgr => '- does not correspond to the name of an existing'.
- ' group ',
+ igna => "Invalid $gpterm name",
+ tgne => "The $gpterm name entered ",
+ grna => "$ucgpterm names and section names used in a ".
+ "$crstype must be unique.",
+ isno => "is not a valid name.",
+ gnmo => "$ucgpterm names may only contain letters, ".
+ "numbers or underscores.",
+ cnnb => "can not be used as it is the name of ",
+ inth => " in this $crstype",
+ thgr => "- does not correspond to the name of an ".
+ "existing $gpterm",
);
-
- my $exitmsg = ''.$lt{'igna'}.'
'.$lt{'tgne'}.' "'.
- $groupname.'" ';
+
+ my $exitmsg = ''.$lt{'igna'}.'
'.
+ $lt{'tgne'}.' "'.$groupname.'" ';
my $dupmsg = $lt{'grna'};
my $earlyout;
if (($groupname eq '') || ($groupname =~ /\W/)) {
$earlyout = $exitmsg.$lt{'isno'}.' '.$lt{'gnmo'};
return $earlyout;
}
- if ($numsec) {
- if (exists($sectioncount{$groupname})) {
- $earlyout = $exitmsg.$lt{'cnnb'}.&mt('a section').$lt{'inth'}.
- ' '.$lt{'grna'};
- return $earlyout;
- }
+ if (exists($sectioncount{$groupname})) {
+ return $exitmsg.$lt{'cnnb'}.&mt('a section').$lt{'inth'}.
+ ' '.$lt{'grna'};
}
- if ($action eq 'create') {
- if ($numgroups) {
- if (exists($curr_groups{$groupname})) {
- $earlyout = $exitmsg.$lt{'cnnb'}.&mt('an existing group').
- $lt{'inth'}.' '.$lt{'grna'};
- return $earlyout;
- }
- }
+ if ($action eq 'create'
+ && exists($curr_groups{$groupname})) {
+
+ return $exitmsg.$lt{'cnnb'}.&mt('an existing [_1]',$gpterm).
+ $lt{'inth'}.' '.$lt{'grna'};
+
} elsif ($action eq 'modify') {
unless(exists($curr_groups{$groupname})) {
- $earlyout = &mt('Group name:').' '.$groupname.$lt{'thgr'}.$lt{'inth'};
+ $earlyout = &mt('[_1] name:',$ucgpterm).' '.$groupname.$lt{'thgr'}.
+ $lt{'inth'};
return $earlyout;
}
}
@@ -3461,22 +3503,13 @@ sub validate_groupname {
}
sub topic_bar {
- my ($r,$tabcol,$imgnum,$title) = @_;
+ my ($r,$imgnum,$title) = @_;
$r->print('
-
- |
-
-
-
-
- |
- '.$title.'
- |
- |
-
-
- |
-
+
+
+ '.$title.'
+
');
return;
}
500 Internal Server Error
Internal Server Error
The server encountered an internal error or
misconfiguration and was unable to complete
your request.
Please contact the server administrator at
root@localhost to inform them of the time this error occurred,
and the actions you performed just before this error.
More information about this error may be available
in the server error log.
| | | |
| |
| |