--- loncom/interface/loncoursegroups.pm 2009/11/23 14:37:50 1.106 +++ loncom/interface/loncoursegroups.pm 2013/09/17 15:04:30 1.121 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: loncoursegroups.pm,v 1.106 2009/11/23 14:37:50 wenzelju Exp $ +# $Id: loncoursegroups.pm,v 1.121 2013/09/17 15:04:30 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -31,6 +31,7 @@ use strict; use Apache::lonnet; use Apache::loncommon(); use Apache::lonhtmlcommon(); +use Apache::lonhtmlgateway; use Apache::lonlocal; use Apache::lonnavmaps(); use Apache::longroup(); @@ -135,7 +136,7 @@ function changeSort(caller) { function openGroupRoster(group,status) { var url = '/adm/grouproster?'; url += 'group='+group+'&status='+status+'&ref=popup'; - var title = 'Group Membership'; + var title = 'Group_Membership'; var options = 'scrollbars=1,resizable=1,menubar=0'; options += ',width=700,height=600'; rosterbrowser = open(url,title,options,'1'); @@ -170,7 +171,7 @@ sub display_groups { my %actionlinks = ( modify => ' ' ''. + &mt('An error occurred retrieving information about resources in the course.').'
'. + &mt('It is recommended that you [_1]re-initialize the course[_2] and then return to this page.','
',''). + ''); + return; + } if ($manage_permission) { if ($action ne 'reenable') { $r->print('
'.$lt{'crng'}.''); @@ -324,7 +333,9 @@ END $action eq 'reenable') { $link .= $group; } else { - $link .= $group.'/smppg?ref=grouplist'; + $link .= + &Apache::longroup::get_group_link($cdom,$cnum,$group,$navmap); + $link .= (($link=~/\?/)?'&':'?').'ref=grouplist'; if (exists($env{'form.refpage'})) { $link .= '&refpage='.$env{'form.refpage'}; } @@ -386,16 +397,32 @@ END $r->print('

'); my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum); if (%curr_groups) { + my $navmap=Apache::lonnavmaps::navmap->new(); + if (!defined($navmap)) { + $r->print('
'. + &mt('An error occurred retrieving information about resources in the course.').'
'. + &mt('It is recommended that you [_1]re-initialize the course[_2] and then return to this page.','',''). + '
'); + return; + } foreach my $group (@coursegroups) { my %group_info = &Apache::longroup::get_group_settings( $curr_groups{$group}); my $description = &unescape( $group_info{description}); - $r->print(''.$group,'
'.$description.'

'); + my $link = + &Apache::longroup::get_group_link($cdom,$cnum,$group,$navmap). + '&ref=grouplist'; + $r->print(''.$group,'
'.$description.'

'); } } } else { - $r->print(&mt('You are not currently a member of any active '.$gpterm.'s in this '.lc($crstype).'.')); + $r->print( + '

' + .&mt('You are not currently a member of any active '.$gpterm.'s' + .' in this '.lc($crstype).'.') + .'

' + ); } } return; @@ -1210,9 +1237,9 @@ sub delete_group { if ($result eq 'ok') { my $outcome = &modify_folders($cdom,$cnum,$groupname,$crstype); if ($outcome eq '') { - $r->print('
' - .&mt('Group successfully deleted.') - .'
'); + my $message = &Apache::lonhtmlcommon::confirm_success(&mt('Group successfully deleted.')); + $message = &Apache::loncommon::confirmwrapper($message); + $r->print($message); } else { $r->print('
'); if ($crstype eq 'Community') { @@ -1223,9 +1250,9 @@ sub delete_group { $r->print('
'); } } else { - $r->print('
' - .&mt('Group deletion failed.') - .'
'); + my $msg = &Apache::lonhtmlcommon::confirm_success(&mt('Group deletion failed.'),1); + $msg = &Apache::loncommon::confirmwrapper($msg); + $r->print($msg); } } return; @@ -1255,7 +1282,7 @@ sub reenable_folder { $LONCAPA::map::resources[$idx] = $foldertitle.':'.$mapurl. ':false:normal:res'; $LONCAPA::map::order[1+$#LONCAPA::map::order]=$idx; - my ($outtext,$errtext) = &LONCAPA::map::storemap($allgrpsmap,1); + my ($outtext,$errtext) = &LONCAPA::map::storemap($allgrpsmap,1,1); if ($errtext) { $outcome='
' .&mt('An error occurred when saving updated parent folder to group:' @@ -1320,7 +1347,7 @@ sub modify_folders { $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1]; } $#LONCAPA::map::order--; - my ($outtext,$errtext) = &LONCAPA::map::storemap($map,1); + my ($outtext,$errtext) = &LONCAPA::map::storemap($map,1,1); if ($errtext) { $outcome='
' .&mt('An error occurred when saving updated parent folder to group:') @@ -1437,9 +1464,9 @@ $context) eq 'ok') { } my $outcome = &reenable_folder($cdom,$cnum,$groupname,$description,$crstype); if ($outcome eq '') { - $r->print('
' - .&mt('Group successfully re-enabled.') - .'
'); + my $message = &Apache::lonhtmlcommon::confirm_success(&mt('Group successfully re-enabled.')); + $message = &Apache::loncommon::confirmwrapper($message); + $r->print($message); } else { $r->print('
'); if ($crstype eq 'Community') { @@ -1450,9 +1477,9 @@ $context) eq 'ok') { $r->print('
'); } } else { - $r->print('
' - .&mt('Re-enabling group failed.') - .'
'); + my $message = &Apache::lonhtmlcommon::confirm_success(&mt('Re-enabling group failed.'),1); + $message = &Apache::loncommon::confirmwrapper($message); + $r->print($message); } return; } @@ -1466,7 +1493,7 @@ sub header { {'add_entries' => $loaditems,}); my $output = <<"END"; $start_page -
+ END if ($action eq 'create' || $action eq 'modify') { @@ -1526,16 +1553,19 @@ sub build_members_list { sub group_files { my ($group,$portpath,$numfiles,$numdirs) = @_; my $dirptr=16384; - my @dir_list=&Apache::portfolio::get_dir_list($portpath,undef,$group); - foreach my $line (@dir_list) { - my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); - if (($filename !~ /^\.\.?$/) && ($filename !~ /\.meta$/ ) && ($filename !~ /(.*)\.(\d+)\.([^\.]*)$/) && ($filename ne 'no_such_dir')) { - if ($dirptr&$testdir) { - $portpath .= '/'.$filename; - $$numdirs ++; - &group_files($group,$portpath,$numfiles,$numdirs) - } else { - $$numfiles ++; + my ($dirlistref,$listerror) = + &Apache::portfolio::get_dir_list($portpath,undef,$group); + if (ref($dirlistref) eq 'ARRAY') { + foreach my $line (@{$dirlistref}) { + my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); + if (($filename !~ /^\.\.?$/) && ($filename !~ /\.meta$/ ) && ($filename !~ /(.*)\.(\d+)\.([^\.]*)$/) && ($filename ne 'no_such_dir')) { + if ($dirptr&$testdir) { + $portpath .= '/'.$filename; + $$numdirs ++; + &group_files($group,$portpath,$numfiles,$numdirs) + } else { + $$numfiles ++; + } } } } @@ -1774,7 +1804,6 @@ sub membership_options { 'picr' => 'Pick the criteria to use to build a list of course users from which you will select members of the new group.', 'pica' => 'Pick the criteria to use to build a list of course users from which you will select additional members of the group.', 'ifno' => 'If you do not wish to add members when you first create the group, there is no need to pick any criteria.', - 'asub' => 'A subsequent step will also allow you to specify automatic adding/dropping of group members triggered by specified user role and section changes in the course.', 'acty' => 'Access types', 'coro' => 'Course roles', 'cose' => 'Course sections', @@ -1988,10 +2017,10 @@ sub print_current_settings { dfac => 'Default access dates', 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:', ); + $lt{'difn'} = &mt('Different collaborative tools[_1]for different members:','
'); my $showstart = &Apache::lonlocal::locallocaltime($startdate); my $showend; if ($enddate == 0) { @@ -2231,11 +2260,12 @@ sub privilege_specificity { "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:', ); + $lt{'plin'} = &mt('Indicate which [_1]optional[_2] privileges members '. + 'will receive by default for a specific tool.','',''); 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 '); } @@ -2337,9 +2367,9 @@ sub default_privileges { &Apache::lonhtmlcommon::row_title($lt{'func'},undef, 'LC_groups_functionality')); my @tableHeader; - foreach my $key (sort(keys(%{$functions}))){ - push (@tableHeader,&mt($functions->{$key})); - } + 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 = ''; @@ -3244,15 +3274,15 @@ sub write_group_data { $description,$tools,\%groupinfo, $gpterm,$ucgpterm,$crstype); if ($result eq 'ok') { - $r->print('
' - .&mt($ucgpterm.' [_1] was created.',''.$groupname.'') - .'
'); + my $msg = &Apache::lonhtmlcommon::confirm_success(&mt($ucgpterm.' [_1] was created.',''.$groupname.'')); + $msg = &Apache::loncommon::confirmwrapper($msg); + $r->print($msg); } else { - $r->print('
' - .&mt('A problem occurred when creating folders for the new '.$gpterm.' [_1]:' - ,''.$groupname.'') - .'
'.$result - .'
'); + my $msg = &Apache::lonhtmlcommon::confirm_success(&mt('A problem occurred when creating folders for the new '.$gpterm.' [_1]:' + ,''.$groupname.'') + .'
'.$result,1); + $msg = &Apache::loncommon::confirmwrapper($msg); + $r->print($msg); } } elsif ($action eq 'modify') { my (@oldtools,@newtools); @@ -3323,9 +3353,9 @@ sub write_group_data { $r->print('
'.$error.'
'); } } - $r->print('
' - .&mt($ucgpterm.' [_1] was updated.',''.$groupname.'') - .'
'); + my $message = &Apache::lonhtmlcommon::confirm_success(&mt($ucgpterm.' [_1] was updated.',''.$groupname.'')); + $message = &Apache::loncommon::confirmwrapper($message); + $r->print($message); } } else { my %actiontype = ( @@ -3503,12 +3533,13 @@ sub process_membership { my $roster_result = &Apache::lonnet::modify_coursegroup_membership($cdom, $cnum,\%usersettings); if ($num_ok) { - foreach my $type (sort(keys(%added))) { - $r->print(&mt('The following users were successfully [_1]',$type)); + my $msgall =''; + foreach my $type (sort(keys(%added))) { + my $message = &mt("The following users were successfully $type"); if (!($type eq 'deleted' || $type eq 'expired')) { - $r->print(&mt(' with the following privileges')); + $message .= &mt(' with the following privileges'); } - $r->print(':
'); + $message .= ':
'; foreach my $user (@{$added{$type}}) { my $privlist = ''; if (!($type eq 'deleted' || $type eq 'expired')) { @@ -3524,10 +3555,14 @@ sub process_membership { } $privlist =~ s/, $//; } - $r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.$privlist.'
'); + $message .= $$userdata{$user}[$$idx{fullname}].' - '.$user.$privlist.'
'; } - $r->print('
'); + $message .= '
'; + $message = &Apache::lonhtmlcommon::confirm_success($message); + $msgall .= $message; } + $msgall = &Apache::loncommon::confirmwrapper($msgall); + $r->print($msgall); } if ($num_fail) { foreach my $type (sort(keys(%failed))) { @@ -3540,13 +3575,15 @@ sub process_membership { } $r->print('
'); } - if (@unchanged > 0) { - $r->print(&mt('No change occurred for the following users:').'
'); - foreach my $user (sort(@unchanged)) { - $r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.'
'); - } - $r->print('
'); - } +# Is that really needed? +# +# if (@unchanged > 0) { +# $r->print(&mt('No change occurred for the following users:').'
'); +# foreach my $user (sort(@unchanged)) { +# $r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.'
'); +# } +# $r->print('
'); +# } if ($roster_result eq 'ok') { $r->print('
' .&mt($ucgpterm.' membership list updated.') @@ -4003,7 +4040,7 @@ sub map_updater { $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); + my ($outtext,$errtext) = &LONCAPA::map::storemap($parentmap,1,1); if ($errtext) { $outcome = '
' .&mt('Error saving updated parent folder.')." ($parentmap): $errtext" @@ -4084,10 +4121,9 @@ sub create_homepage { my ($cdom,$cnum,$name,$groupinfo,$tools,$gpterm,$ucgpterm,$now) = @_; my $functionality = join(',',@{$tools}); my $content = &unescape($$groupinfo{description}); - $content=~s/\s+$//s; - $content=~s/^\s+//s; - $content=~s/\$//s; - $content=&Apache::lonfeedback::clear_out_html($content,1); + chomp($content); + my $gateway = Apache::lonhtmlgateway->new(); + $content = $gateway->process_incoming_html($content,1); my %pageinfo = ( 'aaa_title' => "$ucgpterm: $name", @@ -4173,15 +4209,15 @@ sub validate_groupname { } if ($action eq 'create') { if (exists($curr_groups{$groupname})) { - return $exitmsg.$lt{'cnnb'}.&mt('an existing [_1]',$gpterm). + return $exitmsg.$lt{'cnnb'}.&mt("an existing $gpterm"). $lt{'inth'}.'.
'.$lt{'grna'}; } elsif (exists($deleted_groups{$groupname})) { - return $exitmsg.$lt{'cnnb'}.&mt('a [_1] which previously existed',$gpterm). + return $exitmsg.$lt{'cnnb'}.&mt("a $gpterm which previously existed"). $lt{'inth'}.'.
'.$lt{'grna'}; } } elsif ($action eq 'modify') { unless(exists($curr_groups{$groupname})) { - $earlyout = &mt('[_1] name:',$ucgpterm).' '.$groupname.$lt{'thgr'}. + $earlyout = &mt("$ucgpterm name:").' '.$groupname.$lt{'thgr'}. $lt{'inth'}; return $earlyout; }