-
-
- '.$lt{'gmem'}.' '.$lt{'picr'});
+ $r->print(&Apache::lonhtmlcommon::topic_bar($image,$lt{'pipa'}).'
+ '.$lt{'gmem'}.' ');
if ($action eq 'create') {
- $r->print($lt{'meof'}.' '.$lt{'ifno'}.' '.$lt{'asub'});
+ $r->print($lt{'picr'}.' '.$lt{'ifno'}.' '.$lt{'asub'});
} else {
- $r->print($lt{'admg'});
+ $r->print($lt{'pica'});
}
$r->print('
-
+
- '.$lt{'acty'}.'
-
- '.$lt{'coro'}.' ');
- if (@sections >0) {
- $r->print('
-
- '.$lt{'cose'}.'
- ');
- }
- $r->print(' ');
+ '.$lt{'acty'}.'
+ '.$lt{'coro'}.'
+ '.$lt{'cose'}.'
+ ');
$r->print(&Apache::lonhtmlcommon::status_select_row(\%status_types));
- $r->print(' ');
- $r->print(&Apache::lonhtmlcommon::role_select_row(\@roles));
+ $r->print('');
+ $r->print(&Apache::lonhtmlcommon::role_select_row(\@roles,undef,undef,1,$cdom,$cnum));
if (@sections > 0) {
@sections = sort {$a cmp $b} @sections;
- unshift(@sections,'all'); # Put 'all' at the front of the list
unshift(@sections,'none'); # Put 'no sections' next
- $r->print('
- '.
- §ions_selection(\@sections,'sectionpick').' ');
+ unshift(@sections,'all'); # Put 'all' at the front of the list
+ } else {
+ @sections = ('all','none');
}
- $r->print('
+ $r->print(''.
+ §ions_selection(\@sections,'sectionpick').'
-
-
- ');
+
');
return;
}
@@ -1425,25 +1844,23 @@ sub sections_selection {
}
foreach my $sec (@{$sections}) {
if ($sec eq 'all') {
- $section_sel .= ' all sections'."\n";
+ $section_sel .= ' '.&mt('all sections').' '."\n";
} elsif ($sec eq 'none') {
- $section_sel .= ' no section'."\n";
+ $section_sel .= ' '.&mt('no section').' '."\n";
} else {
- $section_sel .= ' '.$sec."\n";
+ $section_sel .= ' '.$sec." \n";
}
}
my $output = '
-
+
'.$section_sel.'
';
return $output;
}
sub access_date_settings {
- my ($r,$tabcol,$action,$formname,$stored,$image,$gpterm,$ucgpterm) = @_;
- my %lt = &Apache::lonlocal::texthash(
- 'sten' => "Default start and end dates for $gpterm access",
- );
+ my ($r,$action,$formname,$stored,$image,$gpterm,$ucgpterm) = @_;
+ my $sten = &mt("Default start and end dates for $gpterm access");
my $starttime = time;
my $endtime = time+(6*30*24*60*60); # 6 months from now, approx
if ($action eq 'modify') {
@@ -1452,29 +1869,18 @@ sub access_date_settings {
$endtime = $$stored{'enddate'};
}
}
- my ($start_table,$end_table) = &date_setting_table
- ($starttime,$endtime,$formname);
- &topic_bar($r,$tabcol,$image,$lt{'sten'});
- $r->print('
-
-
- '.$start_table.'
-
-
-
-
-
-
- '.$end_table.'
- ');
+ my ($table) = &date_setting_table($starttime,$endtime,$formname);
+ $r->print(&Apache::lonhtmlcommon::topic_bar($image,$sten).'
+ '.$table.'
+ ');
return;
}
sub choose_members_form {
- my ($r,$cdom,$cnum,$tabcol,$action,$formname,$page,$groupname,$description,
+ my ($r,$cdom,$cnum,$action,$formname,$page,$groupname,$description,
$granularity,$quota,$startdate,$enddate,$tools,$fixedprivs,$toolprivs,
$functions,$users,$userdata,$idx,$stored,$states,$navbuttons,
- $rowColor1,$rowColor2,$gpterm,$ucgpterm,$crstype) = @_;
+ $gpterm,$ucgpterm,$crstype) = @_;
my @regexps = ('user_','userpriv_','sec_');
my %origmembers;
$r->print(&Apache::lonhtmlcommon::echo_form_input(
@@ -1483,17 +1889,10 @@ sub choose_members_form {
\@regexps));
my $earlyout = &validate_groupname($groupname,$action,$cdom,$cnum,$gpterm,
$ucgpterm,$crstype);
- $r->print('
-
-
-
-
-');
if ($earlyout) {
- $r->print($earlyout.' ');
+ $r->print($earlyout);
&display_navbuttons($r,$formname,$$states{$action}[$page-1],
$$navbuttons{'gtps'});
- $r->print('
');
return;
}
my ($specimg,$memimg);
@@ -1501,10 +1900,9 @@ sub choose_members_form {
my @unavailable = ();
&check_tools($functions,$tools,\@available,\@unavailable);
if ($action eq 'create') {
- &print_current_settings($r,$action,$tabcol,$rowColor1,$rowColor2,
- $functions,$startdate,$enddate,$groupname,
- $description,$granularity,$quota,\@available,
- \@unavailable,$gpterm,$ucgpterm);
+ &print_current_settings($r,$action,$functions,$startdate,$enddate,
+ $groupname,$description,$granularity,$quota,
+ \@available,\@unavailable,$gpterm,$ucgpterm);
$specimg = 4;
$memimg = 5;
} else {
@@ -1524,13 +1922,13 @@ sub choose_members_form {
}
}
}
- &privilege_specificity($r,$tabcol,$rowColor1,$rowColor2,$action,
- $specimg,$tools,$stored,$toolprivs,
- $fixedprivs,\@available,$formname,$gpterm,$ucgpterm);
- my $newusers = &pick_new_members($r,$action,$formname,$tabcol,$rowColor1,
- $rowColor2,\@available,$idx,$stored,
- $memimg,$users,$userdata,$granularity,
- \%origmembers,$gpterm,$ucgpterm);
+ &privilege_specificity($r,$action,$specimg,$tools,$stored,$toolprivs,
+ $fixedprivs,\@available,$formname,$gpterm,$ucgpterm,
+ $functions,$crstype);
+ my $newusers = &pick_new_members($r,$action,$formname,\@available,$idx,
+ $stored,$memimg,$users,$userdata,
+ $granularity,\%origmembers,$gpterm,
+ $ucgpterm);
if ($newusers || $action eq 'create') {
&display_navbuttons($r,$formname,$$states{$action}[$page-1],
$$navbuttons{'gtps'},$$states{$action}[$page+1],
@@ -1539,34 +1937,29 @@ sub choose_members_form {
&display_navbuttons($r,$formname,$$states{$action}[$page-1],
$$navbuttons{'gtps'});
}
- $r->print('');
return;
}
sub display_navbuttons {
my ($r,$formname,$prev,$prevtext,$next,$nexttext) = @_;
- $r->print('
-
-
-
-
-
- ');
+ $r->print('');
if ($prev) {
$r->print('
');
+ } elsif ($prevtext) {
+ $r->print('
+
+ ');
}
if ($next) {
$r->print('
');
}
- $r->print('
-
-
-');
+ $r->print('');
}
sub check_tools {
@@ -1582,21 +1975,20 @@ sub check_tools {
}
sub print_current_settings {
- my ($r,$action,$tabcol,$rowColor1,$rowColor2,$functions,$startdate,$enddate,
- $groupname,$description,$granularity,$quota,$available,$unavailable,
- $gpterm,$ucgpterm) = @_;
+ my ($r,$action,$functions,$startdate,$enddate,$groupname,$description,
+ $granularity,$quota,$available,$unavailable,$gpterm,$ucgpterm) = @_;
my %lt = &Apache::lonlocal::texthash(
- grna => "$ucgpterm Name",
- desc => 'Description',
- grfn => "$ucgpterm Functions",
+ grna => 'Group Name',
+ desc => 'Group Title',
+ grfn => "Collaborative Tools",
gran => 'Granularity',
quot => 'File quota',
dfac => 'Default access dates',
- ygrs => "Your $gpterm selections",
- tfwa => "The following settings will apply to the $gpterm:",
- difn => 'Different functionality for different members:',
- stda => 'Start date',
+ ygrs => "Your group selections - ",
+ tfwa => "The following settings will apply to the group:",
+ difn => 'Different collaborative tools for different members:',
+ stda => 'Start date:',
enda => 'End date:',
);
my $showstart = &Apache::lonlocal::locallocaltime($startdate);
@@ -1606,104 +1998,79 @@ sub print_current_settings {
} else {
$showend = &Apache::lonlocal::locallocaltime($enddate);
}
- $r->print('');
if ($action eq 'create') {
$r->print('
-
- '.$lt{'ygrs'}.'
+'.$lt{'ygrs'}.'
'.$lt{'tfwa'}.'
-
- ');
+');
}
- $r->print('');
- $r->print(&Apache::lonhtmlcommon::start_pick_box());
+ $r->print(&Apache::loncommon::start_data_table('LC_course_group_status').
+ &Apache::loncommon::start_data_table_header_row());
$r->print('
-
-
-
-
- '.$lt{'grna'}.'
- '.$lt{'desc'}.'
- '.$lt{'grfn'}.'
- '.$lt{'gran'}.'
- '.$lt{'quot'}.'
- '.$lt{'dfac'}.'
-
-
- '.$groupname.'
- '.$description.'
+ '.$lt{'grna'}.'
+ '.$lt{'desc'}.'
+ '.$lt{'grfn'}.'
+ '.$lt{'gran'}.'
+ '.$lt{'quot'}.'
+ '.$lt{'dfac'}.'
+');
+ $r->print(&Apache::loncommon::end_data_table_header_row().
+ &Apache::loncommon::start_data_table_row('LC_data_table_dense'));
+ $r->print('
+ '.$groupname.'
+ '.$description.'
');
+
if (@{$available} > 0) {
- $r->print('Available:
- ');
- my $rowcell = int(@{$available}/2) + @{$available}%2;
+ $r->print(''.&mt('Available for assignment to members:').' ');
+ $r->print('');
for (my $i=0; $i<@{$available}; $i++) {
- if (@{$available} > 3) {
- if ($i==$rowcell) {
- $r->print(' ');
- }
- }
- $r->print(''.$$functions{$$available[$i]}.
- ' ');
+ $r->print(''.&mt($$functions{$$available[$i]}).' ');
}
- if ((@{$available} > 3) && (@{$available}%2)) {
- $r->print(' ');
- }
- $r->print('
');
+ $r->print('');
}
+
if (@{$unavailable} > 0) {
- $r->print('Unavailable:
- ');
- my $rowcell = int(@{$unavailable}/2) + @{$unavailable}%2;
- for (my $j=0; $j<@{$unavailable}; $j++) {
- if (@{$unavailable} > 3) {
- if ($j==$rowcell) {
- $r->print(' ');
- }
- }
- $r->print(''.$$functions{$$unavailable[$j]}.
- ' ');
+ $r->print(''.&mt('Unavailable for assignment:').' ');
+ $r->print('');
+ for (my $i=0; $i<@{$unavailable}; $i++) {
+ $r->print(''.&mt($$functions{$$unavailable[$i]}).' ');
}
- if ((@{$unavailable} > 3) && (@{$unavailable}%2)) {
- $r->print(' ');
- }
- $r->print('
');
+ $r->print('');
}
+
+ my $quota_text=&mt('[_1] Mb',$quota);
+ my $granu_text=&mt($granularity);
$r->print(<<"END");
- $lt{'difn'}
- $granularity
- $quota Mb
- $lt{'stda'} $showstart
- $lt{'enda'} $showend
+ $lt{'difn'} $granu_text
+ $quota_text
+ $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,$gpterm,
- $ucgpterm) = @_;
+ my ($r,$action,$formname,$available,$idx,$stored,$img,$users,$userdata,
+ $granularity,$origmembers,$gpterm,$ucgpterm) = @_;
my %lt = &Apache::lonlocal::texthash(
- 'gpme' => "$ucgpterm membership",
+ 'gpme' => "Group membership",
'addm' => 'Add members',
- 'setf' => 'Set functionality',
- 'func' => 'Functionality',
- 'nome' => 'No members to add at this time.',
+ 'setf' => 'Assign collaborative tools',
+ 'func' => 'Tools',
+ 'nome' => 'No members to add at this time, as there are no users '.
+ 'matching the specified type(s), role(s) and section(s).',
'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.',
+ " matching the specified type(s), role(s), and ".
+ "section(s) are already affiliated with this group.",
+ '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.",
);
my %members;
my $totalusers = 0;
@@ -1727,61 +2094,51 @@ sub pick_new_members {
$r->print(&check_uncheck_tools($r,$available));
}
}
- &topic_bar($r,$tabcol,$img,$lt{'gpme'});
+ $r->print(&Apache::lonhtmlcommon::topic_bar($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(' '.''.$tool.' ');
}
- $r->print(' ');
+ $r->print('');
}
}
my %Sortby = ();
@@ -1794,29 +2151,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') {
@@ -1827,69 +2183,61 @@ 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,$gpterm,$ucgpterm) = @_;
+ my ($r,$action,$img,$tools,$stored,$toolprivs,$fixedprivs,$available,
+ $formname,$gpterm,$ucgpterm,$functions,$crstype) = @_;
my %lt = &Apache::lonlocal::texthash (
- 'uprv' => 'User privileges',
- 'frty' => 'For each type of functionality you have chosen to include, '.
- 'there is a set of standard privileges which apply to all '.
- 'of those for whom the functionality is enabled.',
- 'thar' => 'There are also additional privileges which can be set for '.
- 'some, or all, members. Please choose one of the following:',
- 'fort' => 'For the types of functionality you have chosen to include '.
- 'there are no additional privileges which can be set for some '.
- 'or all members.',
- 'eaty' => 'Each of the types of functionality includes standard '.
- 'privileges which apply to members with access to that '.
- 'functionality, and may also include additional privileges '.
+ 'uprv' => 'User privileges for collaborative tools',
+ 'frty' => 'For each collaborative tool you have chosen to include, '.
+ 'there is a set of core privileges which all group members '.
+ 'assigned use of the tool will receive.',
+ 'thar' => 'For some tools there are also additional optional '.
+ 'privileges which can be set.',
+ 'plch' => 'Choose one of the following:',
+ 'fort' => 'For the collaborative tools you have chosen to include '.
+ 'only core privileges are available, '.
+ 'so there are no optional privileges to assign.',
+ 'eaty' => 'Each collaborative tool includes core '.
+ 'privileges assigned to all members with access to the '.
+ 'tool. Some tools may also feature additional privileges '.
'which can be set for specific members.',
- '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.",
+ 'cutg' => 'Currently the group is configured ',
+ 'sdif' => 'so different members can receive different optional privileges for a particular tool.',
+ 'sall' => 'so all members will receive the same optional privileges for a particular tool.',
+ 'algm' => 'All group members will receive the same privileges for any tool assigned to them, including the default set of optional privileges.',
+ 'smgp' => 'Different group members may receive different privileges from '.
+ 'others for the tools they have been assigned.',
+ 'thwi' => 'These will be the privileges all group members receive for a particular assigned tool, '.
+ '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.',
+ "in the future via automatic group assignment ".
+ "for users who receive specific sections/roles in the course ",
+ 'asyo' => "As you have chosen not to include any collaborative tools ".
+ "in the group, no default optional privileges need to be set.",
+ 'plin' => 'Indicate which optional privileges members '.
+ 'will receive by default for a specific tool.',
'oppr' => 'Optional privileges',
'defp' => 'The default privileges new members will receive are:',
);
+ if ($crstype eq 'Community') {
+ $lt{'thes'} = &mt('These will be the privileges given to members assigned in the future via automatic group assignment for users who receive specific sections/roles in the community ');
+ }
my $totaloptionalprivs = 0;
foreach my $tool (@{$tools}) {
foreach my $priv (sort(keys(%{$$toolprivs{$tool}}))) {
@@ -1898,14 +2246,9 @@ sub privilege_specificity {
}
}
}
- &topic_bar($r,$tabcol,$img,$lt{'uprv'});
- $r->print('
-
-
-
- ');
+ $r->print(&Apache::lonhtmlcommon::topic_bar($img,$lt{'uprv'}));
if ((($action eq 'create') && (@{$available} > 0)) ||
- (($action eq 'modify') && ($formname eq 'change_settings'))) {
+ (($action eq 'modify') && ($formname eq 'change_settings'))) {
my %specific = (
'No' => 'checked="checked"',
'Yes' => '',
@@ -1913,7 +2256,7 @@ sub privilege_specificity {
if ($action eq 'create') {
$r->print($lt{'frty'}.' ');
if ($totaloptionalprivs) {
- $r->print($lt{'thar'});
+ $r->print($lt{'thar'}.' '.$lt{'plch'});
} else {
$r->print($lt{'fort'});
}
@@ -1929,23 +2272,16 @@ sub privilege_specificity {
}
if ($totaloptionalprivs) {
$r->print('
- '.$lt{'algm'}.'
- '.$lt{'smgp'}.'
-
-
-
-
- ');
+
+ '.$lt{'algm'}.'
+ '.$lt{'smgp'}.' ');
} else {
$r->print(' ');
}
if ($totaloptionalprivs) {
- $r->print('
-
-
- '.$lt{'plin'});
+ $r->print($lt{'plin'});
if ($action eq 'create') {
- $r->print(' '.$lt{'thwi'});
+ $r->print(' '.$lt{'thwi'});
}
$r->print(' '.$lt{'thes'});
if ($action eq 'create') {
@@ -1954,30 +2290,22 @@ 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,$functions);
} else {
if ($action eq 'create') {
$r->print($lt{'asyo'});
+ $r->print(' ');
} elsif ($action eq 'modify' && $formname eq 'pick_members') {
my @defprivs;
if (ref($$stored{'defpriv'}) eq 'ARRAY') {
@@ -1990,98 +2318,93 @@ 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,$functions) = @_;
my %lt = &Apache::lonlocal::texthash(
'addp' => 'Additional privileges',
'fixp' => 'Fixed privileges',
'oppr' => 'Optional privileges',
- 'func' => 'Function',
+ 'func' => 'Collaborative Tool',
);
- $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'));
+ my @tableHeader;
+ if ((ref($functions) eq 'HASH') && (ref($tools) eq 'ARRAY')) {
+ @tableHeader = map { $functions->{$_}; } @{$tools};
+ }
+ $r->print(join('', @tableHeader));
+ $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',
+ 'func' => 'Collaborative Tool',
);
$r->print(&Apache::lonhtmlcommon::start_pick_box());
$r->print('');
@@ -2091,7 +2414,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);
}
}
@@ -2147,10 +2470,10 @@ 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,$quota,$specificity,$idx,$states,$navbuttons,$rowColor1,
- $rowColor2,$gpterm,$ucgpterm) = @_;
+ $granularity,$quota,$specificity,$idx,$states,$navbuttons,$gpterm,
+ $ucgpterm) = @_;
my %lt = &Apache::lonlocal::texthash(
grse => "$ucgpterm settings",
mogm => "Modify $gpterm membership",
@@ -2168,39 +2491,27 @@ 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,$quota,\@available,
- \@unavailable,$gpterm,$ucgpterm);
-$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(' ');
- &display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext,
- $$states{$action}[$page+1],$nexttext);
- $r->print('
');
+ $r->print(&Apache::lonhtmlcommon::topic_bar(1,$lt{'grse'}));
+ &print_current_settings($r,$action,$functions,$startdate,$enddate,
+ $groupname,$description,$granularity,$quota,
+ \@available,\@unavailable,$gpterm,$ucgpterm);
+ $r->print(&Apache::lonhtmlcommon::topic_bar(2,$lt{'mogm'}));
+ my $numcurrent = ¤t_membership($r,$cdom,$cnum,$formname,$groupname,
+ \@available,\@unavailable,$fixedprivs,
+ $granularity,$specificity);
+ if ($numcurrent > 0) {
+ &display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext,
+ $$states{$action}[$page+1],$nexttext);
+ } else {
+ &display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext);
+ }
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(
@@ -2214,314 +2525,213 @@ sub current_membership {
'reen' => 'Re-enable',
'acti' => 'Activate',
'dele' => 'Delete',
- 'curf' => 'Current Functionality',
+ 'curf' => 'Current Tool Set',
'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} = {
- uname => $uname,
- udom => $udom,
- start => &Apache::lonlocal::locallocaltime($start),
- currtools => [],
- newtools => [],
- };
-
- 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 ++;
- }
- 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,$num_items,$hastools,$addtools) =
+ &Apache::longroup::group_memberlist($cdom,$cnum,$groupname,$fixedprivs,
+ $available);
+ my $numcurrent = scalar(keys(%{$current}));
+ if ($numcurrent > 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_items->{'active'}) {
+ &check_uncheck_buttons($r,$formname,'expire',$lt{'expi'});
+ }
+ if ($num_items->{'previous'}) {
+ &check_uncheck_buttons($r,$formname,'reenable',$lt{'reen'});
+ }
+ if ($num_items->{'future'}) {
+ &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('
-
- '.$lt{'curf'}.'
-
+ '.$lt{'curf'}.'
+
-
-
+
');
- }
}
- $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 Tools').' ');
+ $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(' print(' '.''.$tool.' ');
- }
- $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(''.
+ $lt{'reen'}.' ');
+ } elsif ($$current{$user}{changestate} eq 'expire') {
+ $r->print(''.
' '.
- $lt{'expi'}.' ');
- } elsif ($current{$user}{changestate} eq 'activate') {
- $r->print(''.
+ $lt{'expi'}.' ');
+ } elsif ($$current{$user}{changestate} eq 'activate') {
+ $r->print(''.
' '.
- $lt{'acti'}.' ');
- }
- $r->print(''.
+ $lt{'acti'}.' ');
+ }
+ $r->print(''.
' '.
- $lt{'dele'}.' ');
- if ($specificity eq 'Yes') {
- $r->print(''.
+ $lt{'dele'}.' ');
+ 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(' ');
+ }
+ } else {
+ foreach my $tool (@{$$current{$user}{newtools}}) {
+ $r->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());
+ } else {
+ $r->print(&mt('There are no active, future or previous group members to modify.'));
}
- return;
+ return $numcurrent;
}
sub check_uncheck_buttons {
my ($r,$formname,$field,$title,$colspan) = @_;
$r->print('
-
- '.$title.'
- '.$title.'
+
+
-
+
-
');
}
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,$gpterm,$ucgpterm) = @_;
+ 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(
@@ -2536,44 +2746,40 @@ sub change_privs_form {
} else {
$nexttext = $$navbuttons{'mose'};
}
- $r->print('');
- &topic_bar($r,$tabcol,3,&mt('Members to delete or expire'));
+ $r->print(&Apache::lonhtmlcommon::topic_bar(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('[_1] member privileges',$ucgpterm));
+ $r->print(&Apache::lonhtmlcommon::topic_bar(4,&mt('Setting optional privileges for specific group members')));
- 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,
- $gpterm);
- $r->print(' ');
+ $stored,$gpterm);
my $prevtext = $$navbuttons{'gtps'};
if ($numchgs || $exp_or_del) {
&display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext,
@@ -2581,50 +2787,34 @@ 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,
+ my ($r,$cdom,$cnum,$action,$formname,$page,$startdate,$enddate,$groupname,
$description,$granularity,$quota,$sectioncount,$tools,$functions,
- $stored,$states,$navbuttons,$rowColor1,$rowColor2,$gpterm,$ucgpterm)=@_;
- $r->print('
-
-
-
-
-');
+ $stored,$states,$navbuttons,$gpterm,$ucgpterm,$crstype)=@_;
+ $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,$quota,\@available,
- \@unavailable,$gpterm,$ucgpterm);
- $r->print('
-
-
-
-
- ');
-
- &membership_options($r,$action,$formname,$tabcol,$sectioncount,1,$gpterm,
- $ucgpterm);
+ &print_current_settings($r,$action,$functions,$startdate,$enddate,
+ $groupname,$description,$granularity,$quota,
+ \@available,\@unavailable,$gpterm,$ucgpterm);
+ &membership_options($r,$cdom,$cnum,$action,$formname,$sectioncount,1,$gpterm,
+ $ucgpterm,$crstype);
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,
- $gpterm,$ucgpterm,$crstype) = @_;
+ 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;
@@ -2641,27 +2831,22 @@ sub choose_privs_form {
$nexttext = $$navbuttons{'adme'};
}
- $r->print('');
- &topic_bar($r,$tabcol,6,&mt('[_1] member privileges',$ucgpterm));
+ $r->print(&Apache::lonhtmlcommon::topic_bar(6,&mt('Setting optional privileges for specific group members')));
- &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,$gpterm);
+ $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,
- $states,$stored,$navbuttons,$img1,$img2,
- $rowColor1,$rowColor2,$gpterm,$ucgpterm,$crstype);
- }
+ my $img1 = 7;
+ my $img2 = 8;
+ &mapping_options($r,$action,$formname,$page,$sectioncount,
+ $states,$stored,$navbuttons,$img1,$img2,
+ $gpterm,$ucgpterm,$crstype,$cdom,$cnum);
}
my $prevtext = $$navbuttons{'gtps'};
&display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext,
$$states{$action}[$page+1],$nexttext);
- $r->print('
');
return;
}
@@ -2724,26 +2909,29 @@ function uncheckAllTools(formname) {
}
sub member_privileges_form {
- my ($r,$tabcol,$action,$formname,$tools,$toolprivs,$fixedprivs,$userdata,
- $usertools,$idx,$memchg,$states,$stored,$rowColor1,$rowColor2,
- $gpterm) = @_;
+ 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',
+ 'fixp' => 'Core privileges',
'oppr' => 'Optional privileges',
- 'func' => 'Function',
- 'forf' => 'For the functionality you have chosen to include '.
- 'there are no optional privileges to set besides '.
- 'the standard privileges.',
- '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 ",
+ 'func' => 'Tool',
+ 'forf' => 'For the collaborative tools included for group '.
+ 'members being added or modified, '.
+ 'there are no optional privileges to set '.
+ 'for specific members.',
+ 'algr' => 'All new group members will receive the same privileges.',
+ 'ifex' => 'If previously expired members are being re-enabled, or '.
+ 'if access for future members is being activated now, '.
+ 'previously set privileges will be preserved.',
+ '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 '.
+ 'tools for any current members.',
'full' => 'Fullname',
'user' => 'Username',
'doma' => 'Domain',
@@ -2787,7 +2975,7 @@ sub member_privileges_form {
}
$numchgs = @currmembers;
if (!$numchgs) {
- $r->print(' '.$lt{'nogm'});
+ $r->print($lt{'nogm'});
return $numchgs;
}
}
@@ -2803,18 +2991,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(''.
- $tool.' ');
+ $r->print(''.&mt($tool).' ');
+ $r->print(' ');
+ $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'}.' '.$lt{'ifex'}.' ');
+ &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,$gpterm,$ucgpterm,
- $crstype) = @_;
+ $sectioncount,$stored,$gpterm,$ucgpterm,$crstype) = @_;
$r->print(&Apache::lonhtmlcommon::echo_form_input(
['origin','action','state','page','sortby']));
@@ -2963,7 +3133,7 @@ sub process_request {
&process_membership($r,$cdom,$cnum,$action,$state,$groupname,$tools,
$enddate,$startdate,$userdata,$idx,$toolprivs,
$usertools,$specificity,\@defprivs,$memchg,$gpterm,
- $ucgpterm);
+ $ucgpterm,$crstype);
}
return;
}
@@ -2985,6 +3155,30 @@ sub write_group_data {
'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 group portfolio in this '.$gpterm
+ .' contained invalid characters, so it has been set to 0 Mb. You can change this by'
+ .' modifying the '.$gpterm.' settings.')
+ .'
');
+ }
+ if ($quota > $maxposs) {
+ $quota = $maxposs;
+ $r->print(''
+ .&mt('The value you entered for the quota for the group portfolio in this '.$gpterm
+ .' exceeded the maximum possible value, so it has been set to [_1] Mb '
+ .'(the maximum possible value).',sprintf("%.2f",$maxposs))
+ .'
');
+ }
my %groupinfo = (
description => $esc_description,
startdate => $startdate,
@@ -2996,8 +3190,9 @@ sub write_group_data {
specificity => $specificity,
autoadd => $env{'form.autoadd'},
autodrop => $env{'form.autodrop'},
- quota => $env{'form.quota'},
+ quota => $quota,
);
+
foreach my $func (keys(%{$functions})) {
my $status;
if (grep(/^$func$/,@{$tools})) {
@@ -3044,12 +3239,92 @@ sub write_group_data {
if ($result eq 'ok') {
if ($action eq 'create') {
- my $put_result = &create_homepage($cdom,$cnum,$groupname,
- \%groupinfo,$tools,$gpterm,
- $ucgpterm);
- $r->print(&mt('[_1] [_2] was created. ',$ucgpterm,$groupname));
- } else {
- $r->print(&mt('[_1] [_2] was updated. ',$ucgpterm,$groupname));
+ my $result = &add_group_folder($cdom,$cnum,$now,$groupname,$action,
+ $description,$tools,\%groupinfo,
+ $gpterm,$ucgpterm,$crstype);
+ if ($result eq 'ok') {
+ $r->print(''
+ .&mt($ucgpterm.' [_1] was created.',''.$groupname.' ')
+ .'
');
+ } else {
+ $r->print(''
+ .&mt('A problem occurred when creating folders for the new '.$gpterm.' [_1]:'
+ ,''.$groupname.' ')
+ .' '.$result
+ .'
');
+ }
+ } elsif ($action eq 'modify') {
+ my (@oldtools,@newtools);
+ if (ref($$stored{'tool'}) eq 'ARRAY') {
+ @oldtools = @{$$stored{'tool'}};
+ }
+ if (ref($tools) eq 'ARRAY') {
+ @newtools = @{$tools};
+ }
+ if (!grep(/^discussion$/,@oldtools) &&
+ grep(/^discussion$/,@newtools)) {
+ my $crspath = '/uploaded/'.$cdom.'/'.$cnum.'/';
+ my $boardsmap = $crspath.'group_boards_'.$groupname.'.sequence';
+ my $navmap = Apache::lonnavmaps::navmap->new();
+ my ($bbmapres,$error);
+ if (defined($navmap)) {
+ $bbmapres = $navmap->getResourceByUrl($boardsmap);
+ undef($navmap);
+ if (!$bbmapres) {
+ my $grpmap = $crspath.'group_folder_'.$groupname.'.sequence';
+ my $disctitle = &mt('Discussion Boards');
+ my $outcome = &map_updater($cdom,$cnum,'group_boards_'.
+ $groupname.'.sequence','bbseq',
+ $disctitle,$grpmap);
+ my ($furl,$ferr) =
+ &Apache::lonuserstate::readmap($cdom.'/'.$cnum);
+ # modify parameter
+ if ($outcome eq 'ok') {
+ $navmap = Apache::lonnavmaps::navmap->new();
+ if (defined($navmap)) {
+ my $parm_result = &parm_setter($navmap,$cdom,$boardsmap,
+ $groupname);
+ if ($parm_result) {
+ $error = &mt('An error occurred while setting parameters '
+ .'for Discussion Boards folder: '
+ .'[_1]',$parm_result);
+ } else {
+ $r->print(''.
+ &mt('Discussion Boards Folder created.')
+ .'
');
+ }
+ undef($navmap);
+ } else {
+ if ($crstype eq 'Community') {
+ $error = &mt("An error occurred while setting parameters '.
+ 'for Discussion Boards folder: '.
+ 'Could not retrieve community information");
+ } else {
+ $error = &mt("An error occurred while setting parameters '.
+ 'for Discussion Boards folder: '.
+ 'Could not retrieve course information");
+ }
+ }
+ } else {
+ $r->print($outcome);
+ }
+ }
+ } else {
+ $error = &mt("An error occurred while retrieving the contents of the group's folder.").' ';
+ if ($crstype eq 'Community') {
+ $error .= &mt("You need to re-initialize the community.");
+
+ } else {
+ $error .= &mt("You need to re-initialize the course.");
+ }
+ }
+ if ($error ne '') {
+ $r->print(''.$error.'
');
+ }
+ }
+ $r->print(''
+ .&mt($ucgpterm.' [_1] was updated.',''.$groupname.' ')
+ .'
');
}
} else {
my %actiontype = (
@@ -3059,8 +3334,10 @@ sub write_group_data {
&Apache::lonnet::logthis("Failed to store $gpterm $groupname ".
'in '.lc($crstype).': '.$cnum.
' in domain: '.$cdom);
- $r->print(&mt('An error occurred when [_1] the new [_2]. '.
- 'Please try again.',$actiontype{$action},$gpterm));
+ $r->print(''
+ .&mt('An error occurred when [_1] the '.$gpterm.'. '
+ .'Please try again.',$actiontype{$action})
+ .'
');
}
return $result;
}
@@ -3068,7 +3345,7 @@ sub write_group_data {
sub process_membership {
my ($r,$cdom,$cnum,$action,$state,$groupname,$tools,$enddate,$startdate,
$userdata,$idx,$toolprivs,$usertools,$specificity,$defprivs,$memchg,
- $gpterm,$ucgpterm)=@_;
+ $gpterm,$ucgpterm,$crstype)=@_;
my %usersettings = ();
my %added= ();
my %failed = ();
@@ -3079,6 +3356,7 @@ sub process_membership {
my %curr_start = ();
my %curr_end = ();
my %tooltype = ();
+ my $context = 'processgroupmembership';
foreach my $tool (@{$tools}) {
foreach my $priv (sort(keys(%{$$toolprivs{$tool}}))) {
@@ -3148,7 +3426,7 @@ sub process_membership {
$curr_privs{$user};
if (&Apache::lonnet::modify_group_roles($cdom,$cnum,$groupname,
$user,$now,$savestart,
- $curr_privs{$user}) eq 'ok') {
+ $curr_privs{$user},'',$context) eq 'ok') {
push(@{$added{'expired'}},$user);
$num_ok ++;
} else {
@@ -3159,7 +3437,7 @@ sub process_membership {
foreach my $user (@deletion) {
$usersettings{$groupname.':'.$user} = $now.':-1:';
if (&Apache::lonnet::modify_group_roles($cdom,$cnum,$groupname,
- $user,$now,'-1','')
+ $user,$now,'-1','','',$context)
eq 'ok') {
push(@{$added{'deleted'}},$user);
$num_ok ++;
@@ -3179,17 +3457,6 @@ sub process_membership {
my $start = $startdate;
my $end = $enddate;
if ($state eq 'memresult') {
- 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';
if (@activate > 0) {
if (grep/^$user$/,@activate) {
$start = $now;
@@ -3204,6 +3471,19 @@ sub process_membership {
$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';
}
@@ -3211,7 +3491,7 @@ sub process_membership {
$group_privs{$user};
if (&Apache::lonnet::modify_group_roles($cdom,$cnum,$groupname,
$user,$end,$start,
- $group_privs{$user}) eq 'ok') {
+ $group_privs{$user},'',$context) eq 'ok') {
push(@{$added{$type}},$user);
$num_ok ++;
} else {
@@ -3250,7 +3530,9 @@ sub process_membership {
}
if ($num_fail) {
foreach my $type (sort(keys(%failed))) {
- $r->print(&mt('The following users could not be [_1], because an error occurred: ',$type));
+ $r->print(''
+ .&mt("The following users could not be $type, because an error occurred:")
+ .'
');
foreach my $user (@{$failed{$type}}) {
$r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.' ');
}
@@ -3258,52 +3540,64 @@ sub process_membership {
$r->print(' ');
}
if (@unchanged > 0) {
- $r->print(&mt('No change occurred for the following users: '));
+ $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(' '.&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).'
');
+ $r->print(''
+ .&mt($ucgpterm.' membership list updated.')
+ .'
');
+ $r->print('');
+ if ($crstype eq 'Community') {
+ $r->print(&mt("Any currently logged in community users affected by the changes you made"
+ .' to group membership or privileges for the [_1] group will need to log out'
+ .' and log back in for their LON-CAPA sessions to reflect these changes.'
+ ,''.$groupname.' '));
+
+ } else {
+ $r->print(&mt("Any currently logged in course users affected by the changes you made"
+ .' to group membership or privileges for the [_1] group will need to log out'
+ .' and log back in for their LON-CAPA sessions to reflect these changes.'
+ ,''.$groupname.' '));
+ }
+ $r->print('
');
} else {
- $r->print(' '.&mt('An error occurred while updating the [_1] membership list -',$gpterm).$roster_result.' ');
+ $r->print(''
+ .&mt("An error occurred while updating the $gpterm membership list:")
+ .' '.$roster_result
+ .'
');
}
return;
}
sub mapping_options {
- my ($r,$action,$formname,$page,$tabcol,$sectioncount,$states,$stored,
- $navbuttons,$img1,$img2,$rowColor1,$rowColor2,$gpterm,$ucgpterm,
- $crstype) = @_;
+ my ($r,$action,$formname,$page,$sectioncount,$states,$stored,
+ $navbuttons,$img1,$img2,$gpterm,$ucgpterm,$crstype,$cdom,$cnum) = @_;
my %lt = &Apache::lonlocal::texthash(
'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.",
+ 'adds' => "If automatic $gpterm enrollment is enabled, when a user is newly 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 $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,$crstype);
+ &automapping($r,$action,$stored,\%lt,$img1);
+ &mapping_settings($r,$sectioncount,\%lt,$stored,$img2,$crstype,$cdom,$cnum,
+ $action);
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'})) {
@@ -3312,179 +3606,141 @@ sub automapping {
if (exists($$stored{'autodrop'})) {
$drop = $$stored{'autodrop'};
}
- &topic_bar($r,$tabcol,$image,$$lt{'endi'});
- $r->print('
-
-
-
- '.$$lt{'gmma'}.': '.$$lt{'adds'}.' '.$$lt{'drops'}.'
-
-
-
-
-
-
-
-
- '.$$lt{'auad'}.':
- on off ');
+ $r->print(&Apache::lonhtmlcommon::topic_bar($image,$$lt{'endi'}).'
+ '.$$lt{'gmma'}.': '.$$lt{'adds'}.' '.$$lt{'drops'}.'
+ '.$$lt{'auad'}.':
+ '.&mt('on').' '.&mt('off').' ');
if ($action eq 'modify') {
- $r->print(' ('.$$lt{'curr'}.' '.$$lt{$add}.' )');
+ $r->print(' ('.&mt('Currently set to [_1].',''.$$lt{$add}.' ').')');
}
$r->print('
-
-
-
-
-
-
- '.$$lt{'auex'}.':
- on off ');
+
+ '.$$lt{'auex'}.':
+ '.&mt('on').' '.&mt('off').' ');
if ($action eq 'modify') {
- $r->print(' ('.$$lt{'curr'}.' '.$$lt{$drop}.' )');
+ $r->print(' ('.&mt('Currently set to [_1].',''.$$lt{$drop}.' ').')');
}
- $r->print('
-
-
-
-
-
-
-
- '.$$lt{'mapr'}.'
-
-
-');
+ $r->print(' '.$$lt{'mapr'});
}
sub mapping_settings {
- my ($r,$tabcol,$rowColor1,$rowColor2,$sectioncount,$lt,$stored,$image,
- $crstype) = @_;
+ my ($r,$sectioncount,$lt,$stored,$image,$crstype,$cdom,$cnum,$action) = @_;
my @sections = keys(%{$sectioncount});
if (@sections > 0) {
@sections = sort {$a cmp $b} @sections;
unshift(@sections,'none'); # Put 'no sections' next
unshift(@sections,'all'); # Put 'all' at the front of the list
+ } else {
+ @sections = ('all','none');
}
- &topic_bar($r,$tabcol,$image,$$lt{'pirs'});
+ $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(&Apache::loncommon::start_data_table().
+ &Apache::loncommon::start_data_table_header_row());
$r->print('
-
-
-
-');
- my @roles = &standard_roles();
- my %customroles = &my_custom_roles();
- $r->print(&Apache::lonhtmlcommon::start_pick_box());
- $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,$crstype);
- my $sections_sel;
- if (@sections > 0) {
- if ($role eq 'cc') {
- $sections_sel = ''.
- &mt('all sections').' ';
- } else {
- $sections_sel=''.
- §ions_selection(\@sections,'sec_'.$role).
- ' ';
- }
- }
- if ($rowNum %2 == 1) {
- $rowColor = $rowColor1;
- } else {
- $rowColor = $rowColor2;
- }
- $r->print(''.$plrole.
- ' '.$sections_sel.' ');
- $rowNum ++;
+ my $roletitle=&Apache::lonnet::plaintext($role,$crstype);
+ $r->print(&print_autorole_item($role,$roletitle,\@sections));
}
+ my @customs;
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;
- }
- $r->print(''.$role.' '.
- $sections_sel.' ');
- $rowNum ++;
+ my ($roletitle) = ($role =~ m|^cr/[^/]+/[^/]+/(.+)$|);
+ push (@customs,$role);
+ $r->print(&print_autorole_item($role,$roletitle,\@sections));
}
- $r->print(&Apache::lonhtmlcommon::end_pick_box());
+ if ($action eq 'modify') {
+ foreach my $role (@{$$stored{'autorole'}}) {
+ if ((!grep(/^\Q$role\E$/,@customs)) &&
+ (!grep(/^\Q$role\E$/,@roles))) {
+ my $roletitle;
+ if ($role =~ /^cr/) {
+ ($roletitle) = ($role =~ m|_([^_]+)$|);
+ } else {
+ $roletitle = &Apache::lonnet::plaintext($role,$crstype);
+ }
+ $r->print(&print_autorole_item($role,$roletitle,\@sections));
+ }
+ }
+ }
+ $r->print(&Apache::loncommon::end_data_table());
return;
}
-sub standard_roles {
- my @roles = ('cc','in','ta','ep','st');
- return @roles;
-}
-
-sub my_custom_roles {
- my %returnhash=();
- my %rolehash=&Apache::lonnet::dump('roles');
- foreach (keys %rolehash) {
- if ($_=~/^rolesdef\_(\w+)$/) {
- $returnhash{$1}=$1;
+sub print_autorole_item {
+ my ($role,$roletitle,$sections) = @_;
+ my $sections_sel;
+ if (@{$sections} > 0) {
+ if (($role eq 'cc') || ($role eq 'co')) {
+ $sections_sel = ''.
+ &mt('all sections').' ';
+ } else {
+ $sections_sel=''.
+ §ions_selection($sections,'sec_'.$role).
+ ' ';
}
}
- return %returnhash;
+ my $output = &Apache::loncommon::start_data_table_row().
+ ' '.
+ ''.$roletitle.' '.$sections_sel.
+ &Apache::loncommon::end_data_table_row();
+ return $output;
+}
+
+sub standard_roles {
+ my ($crstype) = @_;
+ my @roles = qw(in ta ep ad st);
+ if ($crstype eq 'Community') {
+ unshift(@roles,'co');
+ } else {
+ unshift(@roles,'cc');
+ }
+ return @roles;
}
sub modify_menu {
my ($r,$groupname,$page,$gpterm) = @_;
my @menu =
- (
- { text => "Modify default $gpterm settings",
- help => 'Course_Modify_Group',
- state => 'change_settings',
- branch => 'settings',
+ ( { categorytitle =>'Group Actions',
+ items => [
+
+ { linktext => "Modify default $gpterm settings",
+ url => '/adm/coursegroups?action=modify&refpage='.$env{'form.refpage'}.'&groupname='.$groupname.'&state=change_settings&branch=settings',
+ icon => 'grp_settings.png',
+ alttext => "Modify default $gpterm settings",
+ permission => '1',
+ help => 'Course_Modify_Group',
},
- { text => 'Modify access, tools and/or privileges for previous, '.
- 'future, or current members',
+ { linktext => 'Modify access, tools and privileges for members',
+ url => '/adm/coursegroups?action=modify&refpage='.$env{'form.refpage'}.'&groupname='.$groupname.'&state=change_members&branch=members',
+ icon => 'grp_tools.png',
+ alttext => 'Modify access, tools and privileges for members',
+ permission => '1',
help => 'Course_Modify_Group_Membership',
- state => 'change_members',
- branch => 'members',
},
- { text => "Add member(s) to the $gpterm",
+ { linktext => "Add member(s) to the $gpterm",
+ url => '/adm/coursegroups?action=modify&refpage='.$env{'form.refpage'}.'&groupname='.$groupname.'&state=add_members&branch=adds',
+ icon => 'grp_add.png',
+ alttext => "Add member(s) to the $gpterm",
+ permission => '1',
help => 'Course_Group_Add_Members',
- state => 'add_members',
- branch => 'adds',
- },
- );
- my $menu_html = '';
- foreach my $menu_item (@menu) {
- $menu_html .=
- '';
- $menu_html.= &mt($menu_item->{'text'}).' ';
- if (exists($menu_item->{'help'})) {
- $menu_html.=
- &Apache::loncommon::help_open_topic($menu_item->{'help'});
- }
- $menu_html.='
'.$/;
- }
- $r->print($menu_html);
+ }]}
+ );
+ $r->print(&Apache::lonhtmlcommon::generate_menu(@menu));
return;
}
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') {
@@ -3494,19 +3750,27 @@ 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.'
- ');
+
+
+
+ '.
+ &mt('Collaborative Tool').'
+
+
+ '.&mt('Fixed').'
+
+
+ '.&mt('Optional').'
+
+
+ ');
foreach my $tool (@{$showtools}) {
if (exists($$usertools{$user}{$tool})) {
- $r->print(''.$tool.' ');
+ $r->print(' ');
+ $r->print(''.$fixed.' '.$dynamic.'
');
} else {
- $r->print(' ');
+ $r->print(' ');
}
}
- $rowNum ++;
+ $r->print(&Apache::loncommon::end_data_table_row());
}
}
@@ -3553,27 +3817,270 @@ 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";
- $start_table .= 'Default starting date for
- member access '.
- ''.$startform.' '.
- ' '." \n";
- $start_table .= "
";
- my $end_table = '';
- $end_table .= "\n";
- $end_table .= 'Default ending date for
- member access '.
- ''.$endform.' '.
- ''.$perpetual.' '." \n";
- $end_table .= "
\n";
- return ($start_table, $end_table);
+ my $perpetual = ' '
+ .' '
+ .&mt('No end date')
+ .' ';
+ my $table = &Apache::lonhtmlcommon::start_pick_box()
+ .&Apache::lonhtmlcommon::row_title(&mt('Start Date'))
+ .$startform
+ .&Apache::lonhtmlcommon::row_closure()
+ .&Apache::lonhtmlcommon::row_title(&mt('End Date'))
+ .$endform
+ .$perpetual
+ .&Apache::lonhtmlcommon::row_closure(1)
+ .&Apache::lonhtmlcommon::end_pick_box();
+ return $table;
+}
+
+sub add_group_folder {
+ my ($cdom,$cnum,$now,$groupname,$action,$description,$tools,$groupinfo,
+ $gpterm,$ucgpterm,$crstype) = @_;
+ if ($cdom eq '' || $cnum eq '') {
+ my $error = '';
+ if ($crstype eq 'Community') {
+ $error .= &mt("Error: invalid community domain or number - group folder creation failed.");
+ } else {
+ $error .= &mt("Error: invalid course domain or number - group folder creation failed.");
+ }
+ $error .= ' ';
+ return $error;
+ }
+ my ($outcome,$allgrpsmap,$grpmap,$boardsmap,$grppage,$warning);
+ my $crspath = '/uploaded/'.$cdom.'/'.$cnum.'/';
+ $allgrpsmap = $crspath.'group_allfolders.sequence';
+ if ($action eq 'create') {
+ if (&get_folder_lock($cdom,$cnum,'group_allfolders',$now) eq 'ok') {
+ # check if group_allfolders.sequence exists.
+ my $mapcontents = &Apache::lonnet::getfile($allgrpsmap);
+ if ($mapcontents eq '-1') { #file does not exist;
+ my $grpstitle = &mt("$crstype $ucgpterm".'s');
+ 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);
+ } else {
+ $outcome = ''
+ .&mt('Non-standard course - folder for all groups not added.')
+ .' ';
+ }
+ if ($outcome ne 'ok') {
+ my $delresult = &release_folder_lock($cdom,$cnum,'group_allfolders');
+ if ($delresult ne 'ok') {
+ $warning = $delresult;
+ }
+ return $outcome.$warning;
+ }
+ }
+ my $delresult = &release_folder_lock($cdom,$cnum,'group_allfolders');
+ if ($delresult ne 'ok') {
+ $warning = $delresult ;
+ }
+ } else {
+ $outcome = ''
+ .&mt('Could not obtain exclusive lock to check status of the folder for all groups. No group folder added.')
+ .' ';
+ return $outcome;
+ }
+ my $grpfolder = &mt($ucgpterm.' Folder - [_1]',$description);
+ $grppage='/adm/'.$cdom.'/'.$cnum.'/'.$groupname.'/smppg';
+ my $grptitle = &mt('Group homepage - [_1]',$description);
+ my ($discussions,$disctitle);
+ my $outcome = &map_updater($cdom,$cnum,'group_folder_'.$groupname.'.sequence',
+ 'grpseq',$grpfolder,$allgrpsmap,$grppage,
+ $grptitle);
+ if ($outcome ne 'ok') {
+ return $outcome.$warning;
+ }
+ 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}) {
+ $disctitle = &mt('Discussion Boards');
+ my $outcome = &map_updater($cdom,$cnum,'group_boards_'.$groupname.
+ '.sequence','bbseq',$disctitle,$grpmap);
+ if ($outcome ne 'ok') {
+ return $outcome.$warning;
+ }
+ $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);
+ my $navmap = Apache::lonnavmaps::navmap->new();
+ if (!defined($navmap)) {
+ $warning .= '';
+ if ($crstype eq 'Community') {
+ $warning .= &mt("Error retrieving community contents").
+ ' '.&mt("You need to re-initialize the community.");
+ } else {
+ $warning .= &mt("Error retrieving course contents").
+ ' '.&mt("You need to re-initialize the course.");
+ }
+ $warning .= ' ';
+ return $warning;
+ }
+ # modify parameters
+ my $parm_result;
+ if ($action eq 'create') {
+ 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);
+ }
+ }
+ undef($navmap);
+ if ($parm_result) {
+ return $warning.$parm_result;
+ } else {
+ return 'ok';
+ }
+}
+
+sub get_folder_lock {
+ my ($cdom,$cnum,$folder_name,$now) = @_;
+ # get lock for folder being edited.
+ my $lockhash = {
+ $folder_name."\0".'locked_folder' => $now.':'.$env{'user.name'}.
+ ':'.$env{'user.domain'},
+ };
+ my $tries = 0;
+ my $gotlock = &Apache::lonnet::newput('coursegroups',$lockhash,$cdom,$cnum);
+
+ while (($gotlock ne 'ok') && $tries <3) {
+ $tries ++;
+ sleep(1);
+ $gotlock = &Apache::lonnet::newput('coursegroups',$lockhash,$cdom,$cnum);
+ }
+ return $gotlock;
+}
+
+sub release_folder_lock {
+ my ($cdom,$cnum,$folder_name) = @_;
+ # remove lock
+ my @del_lock = ($folder_name."\0".'locked_folder');
+ my $dellockoutcome=&Apache::lonnet::del('coursegroups',\@del_lock,$cdom,$cnum);
+ if ($dellockoutcome ne 'ok') {
+ return (''
+ .&mt('Warning: failed to release lock for folder: [_1].',''.$folder_name.' ')
+ .'
'
+ );
+ } 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)=&LONCAPA::map::mapread($parentmap);
+ if ($fatal) {
+ $outcome = ''
+ .&mt('Error reading contents of parent folder.')." ($parentmap): $errtext"
+ .'
';
+ return $outcome;
+ } else {
+ my $newidx=&LONCAPA::map::getresidx($newmapurl);
+ $LONCAPA::map::resources[$newidx] = $itemtitle.':'.$newmapurl.
+ ':false:normal:res';
+ $LONCAPA::map::order[1+$#LONCAPA::map::order]=$newidx;
+ my ($outtext,$errtext) = &LONCAPA::map::storemap($parentmap,1);
+ if ($errtext) {
+ $outcome = ''
+ .&mt('Error saving 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,$crstype) = @_;
+ if (!defined($navmap)) {
+ my $allresults;
+ if ($crstype eq 'Community') {
+ $allresults = &mt("Parameters not set for [_1] because the contents of the community could not be retrieved.",$url).' '.
+ &mt("You need to reinitialize the community.");
+ } else {
+ $allresults = &mt("Parameters not set for [_1] because the contents of the course could not be retrieved.",$url).' '.
+ &mt("You need to reinitialize the course.");
+
+ }
+ return ''.$allresults.'
';
+ }
+ my %hide_settings = (
+ 'course' => {
+ 'num' => 13,
+ 'set' => 'yes',
+ },
+ 'group' => {
+ 'num' => 5,
+ 'set' => 'no',
+ 'extra' => $groupname,
+ },
+ );
+ my $res = $navmap->getResourceByUrl($url);
+ my $allresults;
+ if ($res) {
+ 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;
+ }
+ }
+ } else {
+ $allresults = '';
+ if ($crstype eq 'Community') {
+ $allresults .= &mt("Parameters not set for [_1] because the resource was not recognized as part of the community.",''.$url.' ');
+ } else {
+ $allresults .= &mt('Parameters not set for [_1] because the resource was not recognized as part of the course.',''.$url.' ');
+ }
+ $allresults .= '
';
+ }
+ return $allresults;
}
sub create_homepage {
- my ($cdom,$cnum,$name,$groupinfo,$tools,$gpterm,$ucgpterm) = @_;
+ my ($cdom,$cnum,$name,$groupinfo,$tools,$gpterm,$ucgpterm,$now) = @_;
my $functionality = join(',',@{$tools});
my $content = &unescape($$groupinfo{description});
$content=~s/\s+$//s;
@@ -3586,7 +4093,7 @@ sub create_homepage {
'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;
@@ -3631,7 +4138,12 @@ sub validate_groupname {
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 %deleted_groups = &Apache::longroup::coursegroups($cdom,$cnum,undef,
+ 'deleted_groups');
+ if (my $tmp = &Apache::lonnet::error(%deleted_groups)) {
+ undef(%deleted_groups);
+ &Apache::lonnet::logthis('Error retrieving groups: '.$tmp.' in '.$cnum.':'.$cdom);
+ }
my %lt = &Apache::lonlocal::texthash (
igna => "Invalid $gpterm name",
tgne => "The $gpterm name entered ",
@@ -3646,8 +4158,8 @@ sub validate_groupname {
"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/)) {
@@ -3658,12 +4170,14 @@ sub validate_groupname {
return $exitmsg.$lt{'cnnb'}.&mt('a section').$lt{'inth'}.
' '.$lt{'grna'};
}
- if ($action eq 'create'
- && exists($curr_groups{$groupname})) {
-
- return $exitmsg.$lt{'cnnb'}.&mt('an existing [_1]',$gpterm).
- $lt{'inth'}.' '.$lt{'grna'};
-
+ if ($action eq 'create') {
+ if (exists($curr_groups{$groupname})) {
+ return $exitmsg.$lt{'cnnb'}.&mt('an existing [_1]',$gpterm).
+ $lt{'inth'}.'. '.$lt{'grna'};
+ } elsif (exists($deleted_groups{$groupname})) {
+ return $exitmsg.$lt{'cnnb'}.&mt('a [_1] which previously existed',$gpterm).
+ $lt{'inth'}.'. '.$lt{'grna'};
+ }
} elsif ($action eq 'modify') {
unless(exists($curr_groups{$groupname})) {
$earlyout = &mt('[_1] name:',$ucgpterm).' '.$groupname.$lt{'thgr'}.
@@ -3674,27 +4188,6 @@ sub validate_groupname {
return;
}
-sub topic_bar {
- my ($r,$tabcol,$imgnum,$title) = @_;
- $r->print('
-
-
-
-
-
-
-
- '.$title.'
-
-
-
-
-
-
-');
- return;
-}
-
sub check_changes {
my ($member_changes,$memchg) = @_;
my %exclusions;
@@ -3734,3 +4227,4 @@ sub check_changes {
}
1;
+
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.