--- loncom/interface/loncoursegroups.pm 2006/07/07 21:25:02 1.49
+++ loncom/interface/loncoursegroups.pm 2006/07/20 03:11:52 1.54
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: loncoursegroups.pm,v 1.49 2006/07/07 21:25:02 raeburn Exp $
+# $Id: loncoursegroups.pm,v 1.54 2006/07/20 03:11:52 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -63,9 +63,9 @@ sub handler {
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
my $view_permission =
- &Apache::lonnet::allowed('vcg',$env{'request.course.id'});
+ &Apache::lonnet::allowed('vcg',$env{'request.course.id'}.($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''));
my $manage_permission =
- &Apache::lonnet::allowed('mdg',$env{'request.course.id'});
+ &Apache::lonnet::allowed('mdg',$env{'request.course.id'}.($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''));
&Apache::lonhtmlcommon::clear_breadcrumbs();
my $gpterm = &Apache::loncommon::group_term();
@@ -91,17 +91,23 @@ sub handler {
my $action = $env{'form.action'};
my $state = $env{'form.state'};
- if ((!defined($action)) || ($action eq 'view')) {
+ if ((!defined($action)) || ($action eq 'view') || ($action eq 'modify')) {
if (!defined($state)) {
$state = 'view';
}
}
if ($action eq 'create' || $action eq 'modify' || $action eq 'view') {
if ($view_permission || $manage_permission) {
- &group_administration($r,$action,$state,$cdom,$cnum,
- \%functions,\%idx,$view_permission,
- $manage_permission,$gpterm,$ucgpterm,
- $crstype);
+ if ($state eq 'view') {
+ &print_main_menu($r,$cdom,$cnum,\%functions,\%idx,
+ $view_permission,$manage_permission,
+ $action,$state,$gpterm,$ucgpterm,$crstype);
+ } else {
+ &group_administration($r,$action,$state,$cdom,$cnum,
+ \%functions,\%idx,$view_permission,
+ $manage_permission,$gpterm,$ucgpterm,
+ $crstype);
+ }
} else {
$r->print(&mt('You do not have [_1] administration '.
'privileges in this [_2]',$gpterm,lc($crstype)));
@@ -117,17 +123,21 @@ sub handler {
sub print_main_menu {
my ($r,$cdom,$cnum,$functions,$idx,$view_permission,$manage_permission,
$action,$state,$gpterm,$ucgpterm,$crstype) = @_;
- my $pagename = "$crstype $ucgpterm".'s';
my $jscript = qq|
function changeSort(caller) {
document.$state.sortby.value = caller;
document.$state.submit();
}\n|;
- $r->print(&header($pagename,$jscript,$action,$state));
+ $r->print(&header('Groups',$jscript,$action,$state));
+ if ($env{'form.refpage'} eq 'enrl') {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"/adm/dropadd",
+ text=>"Enrollment Manager"});
+ }
&Apache::lonhtmlcommon::add_breadcrumb
({href=>"/adm/coursegroups",
- text=>"$pagename"});
- $r->print(&Apache::lonhtmlcommon::breadcrumbs($pagename));
+ text=>"Groups"});
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Groups'));
&display_groups($r,$cdom,$cnum,$functions,$idx,$view_permission,
$manage_permission,$action,$state,$gpterm,$ucgpterm,
$crstype);
@@ -142,7 +152,7 @@ sub display_groups {
my %grp_info = ();
my %actionlinks = (
modify => ' ' 'Description',
+ gname => 'Group Name',
+ desc => 'Group Title',
crea => 'Creator',
crtd => 'Created',
last => 'Last Modified',
- func => 'Functionality',
+ func => 'Collaborative Tools',
quot => 'Quota (Mb)',
memb => 'Members',
file => 'Files',
dibd => 'Discussion Boards',
dius => 'Disk Use (%)',
- nogr => 'No '.$gpterm.'s exist.',
- crng => 'Create a new '.$gpterm,
+ nogr => 'No groups exist.',
+ crng => 'Create a new group',
alth => 'Although your current role has privileges'.
- ' to view any existing '.$gpterm.'s in this'.
+ ' to view any existing groups in this'.
lc($crstype).', you do not have privileges'.
- 'to create new '.$gpterm.'s.',
+ 'to create new groups.',
);
if ($view_permission) {
if (!defined($action)) {
@@ -177,7 +187,9 @@ sub display_groups {
my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum);
if (%curr_groups) {
if ($manage_permission) {
- $r->print('
'.$lt{'crng'}.'');
+ if (!exists($env{'form.refpage'})) {
+ $r->print('
'.$lt{'crng'}.'');
+ }
}
$r->print('
');
$r->print(&Apache::loncommon::start_data_table().
@@ -273,7 +285,10 @@ END
if ($action eq 'modify' || $action eq 'delete') {
$link .= $group;
} else {
- $link .= $group.'/smppg';
+ $link .= $group.'/smppg?ref=grouplist';
+ if (exists($env{'form.refpage'})) {
+ $link .= '&refpage='.$env{'form.refpage'};
+ }
}
$link .= '">'.$lt{$action}.'';
if ($action eq 'view') {
@@ -312,7 +327,9 @@ END
} else {
$r->print($lt{'nogr'});
if ($manage_permission) {
- $r->print('
'.$lt{'crng'}.'');
+ if (!exists($env{'form.refpage'})) {
+ $r->print('
'.$lt{'crng'}.'');
+ }
} else {
$r->print('
'.$lt{'alth'});
@@ -329,8 +346,7 @@ END
$curr_groups{$group});
my $description = &unescape(
$group_info{description});
- my ($uname,$udom) = split(/:/,$group_info{creator});
- $r->print(''.$group,'
'.$description.'
');
+ $r->print(''.$group,'
'.$description.'
');
}
}
} else {
@@ -350,6 +366,7 @@ sub group_administration {
my @types = ();
my @roles = ();
my @sections = ();
+ my @buildsections = ();
my %users = ();
my %userdata = ();
my @members = ();
@@ -401,8 +418,6 @@ sub group_administration {
if ($state eq '') {
if (defined($env{'form.groupname'})) {
$state = 'pick_task';
- } else {
- $state = 'pick_group';
}
} else {
%stored = &retrieve_settings($cdom,$cnum,$groupname);
@@ -496,11 +511,9 @@ sub group_administration {
(($action eq 'modify') && (($state eq 'change_settings') ||
($state eq 'add_members')))) {
%sectioncount = &Apache::loncommon::get_sections($cdom,$cnum);
- if (%sectioncount) {
- $elements{'create'}{'pick_name'}{'sectionpick'} = 'selectbox';
- $elements{'modify'}{'change_mapping'}{'sectionpick'} = 'selectbox';
- $elements{'modify'}{'add_members'}{'sectionpick'} = 'selectbox';
- }
+ $elements{'create'}{'pick_name'}{'sectionpick'} = 'selectbox';
+ $elements{'modify'}{'change_mapping'}{'sectionpick'} = 'selectbox';
+ $elements{'modify'}{'add_members'}{'sectionpick'} = 'selectbox';
}
if (($action eq 'create') ||
@@ -514,13 +527,15 @@ sub group_administration {
if (defined($env{'form.sectionpick'})) {
@sections=&Apache::loncommon::get_env_multiple('form.sectionpick');
if (grep/^all$/,@sections) {
- @sections = sort {$a cmp $b} keys(%sectioncount);
+ @buildsections = sort {$a cmp $b} keys(%sectioncount);
+ } else {
+ @buildsections = @sections;
}
}
}
if (($state eq 'pick_members') || ($state eq 'pick_privs') || ($state eq 'change_privs')) {
- &build_members_list($cdom,$cnum,\@types,\@roles,\@sections,\%users,
+ &build_members_list($cdom,$cnum,\@types,\@roles,\@buildsections,\%users,
\%userdata);
}
if ($state eq 'pick_members') {
@@ -556,7 +571,7 @@ sub group_administration {
$num_reenable ++;
next;
} elsif (($start > $now)) {
- $num_activate = 1;
+ $num_activate ++;
next;
} else {
$num_expire ++;
@@ -725,13 +740,13 @@ sub group_administration {
my $space_trim = '/^\s*|\s*\$/g,""';
my $float_check = '/^([0-9]*\.?[0-9]*)$/';
$validate_script = '
- var newquota = document.'.$state.'.quota.value;
+ var newquota = new String(document.'.$state.'.quota.value);
newquota.replace('.$space_trim.');
if (newquota == "" ) {
document.'.$state.'.quota.value = 0;
- newquota = 0;
+ newquota = "0";
}
- var maxposs = '.$maxposs.';
+ var maxposs = '.sprintf("%.2f",$maxposs).';
if (newquota > maxposs) {
alert("The file repository quota you entered for this group ("+newquota+" Mb) exceeds the maximum possible ("+maxposs+" Mb). Please enter a smaller number.");
return;
@@ -782,7 +797,7 @@ function changeSort(caller) {
my %states = ();
my %branchstates = ();
@{$states{'create'}} = ('pick_name','pick_members','pick_privs','result');
- @{$states{'modify'}} = ('pick_group','pick_task');
+ @{$states{'modify'}} = ('pick_task');
@{$branchstates{'noprivs'}} = ('result');
@{$branchstates{'settings'}} = ('change_settings','chgresult');
@{$branchstates{'members'}} = ('change_members','change_privs','memresult');
@@ -806,8 +821,7 @@ function changeSort(caller) {
}
my $loaditems = &onload_action($action,$state);
- my $crumbtitle = "$crstype $ucgpterm".'s';
- $r->print(&header("$crumbtitle Manager",
+ $r->print(&header("Groups Manager",
$jscript,$action,$state,$page,$loaditems));
if ($env{'form.refpage'} eq 'enrl') {
@@ -815,11 +829,22 @@ function changeSort(caller) {
({href=>"/adm/dropadd",
text=>"Enrollment Manager",
faq=>9,bug=>'Instructor Interface',});
- } else {
+ if ($action eq 'modify') {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"/adm/coursegroups?refpage=enrl&action=modify",
+ text=>"Groups",
+ faq=>9,bug=>'Instructor Interface',});
+ }
+ } else {
&Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"/adm/coursegroups",
- text=>"$crumbtitle",
- faq=>9,bug=>'Instructor Interface',});
+ ({href=>"/adm/coursegroups",
+ text=>"Groups",
+ faq=>9,bug=>'Instructor Interface',});
+ if ($env{'form.refpage'} eq 'grouplist') {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"/adm/$cdom/$cnum/$env{'form.groupname'}/smppg?ref=grouplist",
+ text=>"Group: $description",});
+ }
}
my %trail = ();
@@ -830,7 +855,6 @@ function changeSort(caller) {
result => 'Creation Complete',
);
%{$trail{'modify'}} = &Apache::lonlocal::texthash(
- pick_group => $ucgpterm.'s',
pick_task => 'Choose Task',
change_settings => "$ucgpterm Settings",
change_members => 'Modify/Delete Members',
@@ -858,7 +882,7 @@ function changeSort(caller) {
&Apache::lonhtmlcommon::add_breadcrumb(
{text=>"$trail{$action}{$state}"});
$r->print(&Apache::lonhtmlcommon::breadcrumbs
- ("$crumbtitle Manager"));
+ ("Groups Manager"));
&display_control($r,$cdom,$cnum,$action,$state,$page,
\%sectioncount,$groupname,$description,$functions,
\@tools,$toolprivs,$fixedprivs,$startdate,$enddate,
@@ -883,9 +907,8 @@ function changeSort(caller) {
} elsif (($action eq 'view') && ($view_permission)) {
&Apache::lonhtmlcommon::add_breadcrumb(
{text=>"View $gpterm".'s'});
- my $crumbtitle = "$crstype $ucgpterm".'s Manager';
$r->print(&Apache::lonhtmlcommon::breadcrumbs
- (&mt($crumbtitle)));
+ ('Groups Manager'));
&display_groups($r,$cdom,$cnum,$functions,$idx,$view_permission,
$manage_permission,$action,$state,$gpterm,$ucgpterm,
$crstype);
@@ -989,11 +1012,7 @@ sub display_control {
}
} elsif ($action eq 'modify') {
my $groupname = $env{'form.groupname'};
- if ($state eq 'pick_group') {
- &display_groups($r,$cdom,$cnum,$functions,$idx,$view_permission,
- $manage_permission,$action,$state,$gpterm,
- $ucgpterm,$crstype);
- } elsif ($state eq 'pick_task') {
+ if ($state eq 'pick_task') {
&modify_menu($r,$groupname,$page,$gpterm);
} elsif ($state eq 'change_settings') {
&general_settings_form($r,$cdom,$cnum,$action,$state,$page,
@@ -1078,8 +1097,7 @@ sub onload_action {
}
if (($action eq 'modify') &&
($state eq 'change_settings' || $state eq 'change_members' ||
- $state eq 'change_privs' || $state eq 'add_members' ||
- $state eq 'pick_members')) {
+ $state eq 'change_privs' || $state eq 'add_members')) {
$loaditems{'onload'} =
'javascript:setFormElements(document.'.$state.')';
}
@@ -1201,15 +1219,14 @@ sub groupsettings_options {
my ($r,$functions,$action,$formname,$stored,$image,$gpterm,
$ucgpterm,$crstype) = @_;
my %lt = &Apache::lonlocal::texthash(
- 'gdat' => "$ucgpterm open and close dates",
- 'sten' => "Set a start date/time and end date/time for the $gpterm",
- 'gfun' => "$ucgpterm functionality",
- 'gnde' => "$ucgpterm name, description and available functionality",
- 'desc' => 'Description',
- 'func' => 'Functionality',
- 'gnam' => "$ucgpterm Name",
- 'doyo' => "Do you want to assign different functionality ".
- "to different $gpterm members?",
+ 'gdat' => "Group access start and end dates",
+ 'gnde' => "Group name, title and available collaborative tools",
+ 'desc' => 'Group Title',
+ 'func' => 'Collaborative Tools',
+ 'gnam' => 'Group Name',
+ 'lett' => 'Letters, numbers and underscore only',
+ 'doyo' => 'Different subsets of the chosen collaborative tools '.
+ 'for different group members?',
);
my ($crsquota,$freespace,$maxposs) = &get_quota_constraints($action,$stored);
&topic_bar($r,$image,$lt{'gnde'});
@@ -1220,7 +1237,8 @@ sub groupsettings_options {
'.$lt{'acty'}.' | -'.$lt{'coro'}.' | '); - if (@sections >0) { - $r->print(' -'.$lt{'cose'}.' | '); - } - $r->print('|
---|---|---|---|
'); + | '.$lt{'coro'}.' | +'.$lt{'cose'}.' | +|
'); $r->print(&Apache::lonhtmlcommon::status_select_row(\%status_types)); $r->print(' | '); $r->print(&Apache::lonhtmlcommon::role_select_row(\@roles)); @@ -1378,10 +1393,11 @@ sub membership_options { @sections = sort {$a cmp $b} @sections; unshift(@sections,'none'); # Put 'no sections' next unshift(@sections,'all'); # Put 'all' at the front of the list - $r->print(' | '. - §ions_selection(\@sections,'sectionpick').' | '); + } else { + @sections = ('all','none'); } - $r->print(' + $r->print(''. + §ions_selection(\@sections,'sectionpick').' |
';
}
- $fixed .= ''.$$toolprivs{$tool}{$priv}.' ';
+ $fixed .= ' | ||||||||||||||||||||||||||
'."\n"; + $dynamic .= ' | None | '."\n"; } if ($privcount < 3) { - $dynamic .= ' -'."\n"; + $dynamic .= ' | '."\n"; } elsif ($privcount%2) { $dynamic = ' | '."\n"; } @@ -1957,7 +1975,7 @@ sub display_defprivs { my $rowColor2 = "#eeeeee"; my %lt = &Apache::lonlocal::texthash( 'priv' => 'Privileges', - 'func' => 'Function', + 'func' => 'Collaborative Tool', ); $r->print(&Apache::lonhtmlcommon::start_pick_box()); $r->print(' | ||||||||||||||||||||||
'.&mt('Additional Functionality').' | '); + $r->print(''.&mt('Additional Tools').' | '); $colspan++; } $r->print(&Apache::loncommon::end_data_table_header_row()); @@ -2249,8 +2273,10 @@ END } } $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 { @@ -2295,7 +2321,7 @@ sub change_privs_form { my $exp_or_del = 0; if (ref($$memchg{'deletion'}) eq 'ARRAY') { if (@{$$memchg{'deletion'}} > 0) { - $r->print('|||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
'.$lt{'tode'}.':
| '.$lt{'toex'}.': |
'); } - &topic_bar($r,4,&mt('[_1] member privileges',$ucgpterm)); + &topic_bar($r,4,&mt('Setting optional privileges for specific group members')); my $numchgs = &member_privileges_form($r,$action,$formname,$tools, $toolprivs,$fixedprivs,$userdata, @@ -2375,20 +2401,18 @@ sub choose_privs_form { $nexttext = $$navbuttons{'adme'}; } - &topic_bar($r,6,&mt('[_1] member privileges',$ucgpterm)); + &topic_bar($r,6,&mt('Setting optional privileges for specific group members')); &member_privileges_form($r,$action,$formname,$tools,$toolprivs, $fixedprivs,$userdata,$usertools,$idx,undef, $states,$stored,$gpterm); if ($action eq 'create') { - if (keys(%{$sectioncount}) > 0) { - my $img1 = 7; - my $img2 = 8; - &mapping_options($r,$action,$formname,$page,$sectioncount, - $states,$stored,$navbuttons,$img1,$img2, - $gpterm,$ucgpterm,$crstype); - } + my $img1 = 7; + my $img2 = 8; + &mapping_options($r,$action,$formname,$page,$sectioncount, + $states,$stored,$navbuttons,$img1,$img2, + $gpterm,$ucgpterm,$crstype); } my $prevtext = $$navbuttons{'gtps'}; &display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext, @@ -2459,21 +2483,24 @@ sub member_privileges_form { $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', @@ -2599,7 +2626,7 @@ END } } else { if (keys(%{$usertools}) > 0) { - $r->print($lt{'algr'}.' '); + $r->print($lt{'algr'}.' '.$lt{'ifex'}.' '); &display_defprivs($r,$tools,$toolprivs,\@defprivs); } else { $r->print($lt{'asno'}.' '); @@ -2711,7 +2738,7 @@ sub write_group_data { } 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)); + $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,sprintf("%.2f",$maxposs))); } my %groupinfo = ( description => $esc_description, @@ -3000,7 +3027,7 @@ sub process_membership { } 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("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).' '); } else { $r->print(''.&mt('An error occurred while updating the [_1] membership list -',$gpterm).$roster_result.' '); } @@ -3015,7 +3042,7 @@ sub mapping_options { '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', @@ -3065,6 +3092,8 @@ sub mapping_settings { @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,$image,$$lt{'pirs'}); my @roles = &standard_roles(); @@ -3106,8 +3135,8 @@ sub mapping_settings { } $r->print(&Apache::loncommon::start_data_table_row(). ' '.$role.' | '.
- $sections_sel.
+ 'value="'.$role.'" />'.&mt('Custom role: ').
+ ''.$role.' | '.$sections_sel.
&Apache::loncommon::end_data_table_row());
}
$r->print(&Apache::loncommon::end_data_table());
@@ -3182,7 +3211,20 @@ sub member_privs_entries {
'.$$userdata{$user}[$$idx{fullname}].' |
'.$uname.' |
'.$udom.' |
- | ');
+
+ | ');
foreach my $tool (@{$showtools}) {
if (exists($$usertools{$user}{$tool})) {
$r->print('
|