--- loncom/interface/loncoursegroups.pm 2008/10/21 14:29:39 1.79 +++ loncom/interface/loncoursegroups.pm 2009/01/30 16:13:04 1.90 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: loncoursegroups.pm,v 1.79 2008/10/21 14:29:39 bisitz Exp $ +# $Id: loncoursegroups.pm,v 1.90 2009/01/30 16:13:04 schafran Exp $ # # Copyright Michigan State University Board of Trustees # @@ -75,11 +75,11 @@ sub handler { my $crstype = &Apache::loncommon::course_type(); my %functions = ( - email => 'E-mail', - discussion => 'Discussion boards', + communication => 'Send Messages', + discussion => 'Discussion Boards', chat => 'Chat', - files => 'File repository', - roster => 'Membership roster', + files => 'File Repository', + roster => 'Membership Roster', homepage => $ucgpterm.' home page', ); @@ -349,8 +349,8 @@ END ''.$quota.''. ''.$totalmembers.''. ''. - '
'.&mt('Files: [_1]',$totalfiles).'
'. - '
'.&mt('Folders: [_1]',$totaldirs).'
'. + ''.&mt('Files: [_1]',$totalfiles).'
'. + ''.&mt('Folders: [_1]',$totaldirs).''. ''. ''.$boards.''. ''.$diskuse.''. @@ -1259,12 +1259,18 @@ sub reenable_folder { sub modify_folders { my ($cdom,$cnum,$groupname) = @_; - my $outcome; + my ($outcome,$groupmap,$groupmapres,$map,$id,$src); my $navmap = Apache::lonnavmaps::navmap->new(); - my $groupmap = '/uploaded/'.$cdom.'/'.$cnum.'/'.'group_folder_'. + if (!defined($navmap)) { + $outcome = '
'. + &mt('Error reading course contents.').' '. + &mt('You need to re-initialize the course.'). + '
'; + return $outcome; + } + $groupmap = '/uploaded/'.$cdom.'/'.$cnum.'/'.'group_folder_'. $groupname.'.sequence'; - my $groupmapres = $navmap->getResourceByUrl($groupmap); - my ($map,$id,$src); + $groupmapres = $navmap->getResourceByUrl($groupmap); if ($groupmapres) { ($map,$id,$src)=&Apache::lonnet::decode_symb($groupmapres->symb()); } @@ -1553,11 +1559,11 @@ sub open_list_window { my ($group,$status,$count,$text) = @_; my $entry; if ($count > 0) { - $entry = ''.$text.' - '.$count. - '
'; + '
'; } else { - $entry = ''.$text.' - '.$count.'
'; + $entry = ''.$text.' - '.$count.'
'; } return $entry; } @@ -1643,16 +1649,16 @@ END for (my $i=0; $i<$halfnum; $i++) { $r->print(' + &mt($$functions{$allfunctions[$i]}).'   '); } - $r->print('print(''. ' '); for (my $j=$halfnum; $j<@allfunctions; $j++) { $r->print(' + &mt($$functions{$allfunctions[$j]}).'   '); } if ($remnum) { @@ -1660,7 +1666,7 @@ END } $r->print(' - @@ -1668,8 +1674,8 @@ END '.&mt('Granularity:').' '.$lt{'doyo'}.'  '); if ($action eq 'modify') { - $r->print('  ('.&mt('Currently set to "[_1]"', - $$stored{'granularity'}).')'); + $r->print('  ('.&mt('Currently set to [_1].' + ,'"'.&mt($$stored{'granularity'}).'"').')'); } $r->print(' @@ -1798,7 +1804,7 @@ sub sections_selection { } } my $output = ' - '.$section_sel.' '; return $output; @@ -1806,9 +1812,7 @@ sub sections_selection { sub access_date_settings { my ($r,$action,$formname,$stored,$image,$gpterm,$ucgpterm) = @_; - my %lt = &Apache::lonlocal::texthash( - 'sten' => "Default start and end dates for $gpterm access", - ); + 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') { @@ -1818,7 +1822,7 @@ sub access_date_settings { } } my ($table) = &date_setting_table($starttime,$endtime,$formname); - $r->print(&Apache::lonhtmlcommon::topic_bar($image,$lt{'sten'}).' + $r->print(&Apache::lonhtmlcommon::topic_bar($image,$sten).' '.$table.' '); return; @@ -1935,7 +1939,7 @@ sub print_current_settings { ygrs => "Your group selections - ", tfwa => "The following settings will apply to the group:", difn => 'Different collaborative tools
for different members:', - stda => 'Start date', + stda => 'Start date:', enda => 'End date:', ); my $showstart = &Apache::lonlocal::locallocaltime($startdate); @@ -1987,7 +1991,7 @@ sub print_current_settings { $r->print('
'); } if (@{$unavailable} > 0) { - $r->print(''.&mt('Unavailable for assignment:').''. + $r->print(''.&mt('Unavailable for assignment:').''. ''); my $rowcell = int(@{$unavailable}/2) + @{$unavailable}%2; for (my $j=0; $j<@{$unavailable}; $j++) { @@ -2005,9 +2009,10 @@ sub print_current_settings { $r->print('
'); } my $quota_text=&mt('[_1] Mb',$quota); + my $granu_text=&mt($granularity); $r->print(<<"END"); - $lt{'difn'} $granularity + $lt{'difn'} $granu_text $quota_text $lt{'stda'} $showstart
$lt{'enda'} $showend @@ -2066,13 +2071,13 @@ sub pick_new_members { if (@{$available} > 0 && $granularity eq 'Yes') { $r->print('
'.$lt{'setf'}.' - - +    - - +
'); } $r->print(' @@ -2095,13 +2100,13 @@ sub pick_new_members { 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('   '); } - $r->print(''); + $r->print(''); } } my %Sortby = (); @@ -2135,7 +2140,7 @@ sub pick_new_members { ''.$id.''. ''.$section.''); if (@{$available} > 0) { - $r->print(''. + $r->print(''. '       '); foreach my $tool (@{$available}) { if ($granularity eq 'Yes') { @@ -2146,7 +2151,7 @@ sub pick_new_members { $tool.'" value="'.$user.'" />'.$tool.'   '); } } - $r->print(''); + $r->print(''); } $r->print(&Apache::loncommon::end_data_table_row()."\n"); } @@ -2233,8 +2238,8 @@ sub privilege_specificity { if ($totaloptionalprivs) { $r->print('
-
-

'); +
+

'); } else { $r->print(''); } @@ -2294,8 +2299,12 @@ sub default_privileges { ); $r->print(&Apache::lonhtmlcommon::start_pick_box('LC_group_priv_box'). &Apache::lonhtmlcommon::row_title($lt{'func'},undef, - 'LC_groups_functionality')); - $r->print(join('',@{$tools})); + 'LC_groups_functionality')); + my @printtool = @{$tools}; + foreach my $printtool (@printtool){ + $printtool = &mt($printtool); + } + $r->print(join('', @printtool)); $r->print(&Apache::lonhtmlcommon::row_closure(1)); my $fixed = ''; my $dynamic = ''; @@ -2311,7 +2320,7 @@ sub default_privileges { $fixed .= ''; } $fixed .= '' - .''.$$toolprivs{$tool}{$priv}.' '; + .''.&mt($$toolprivs{$tool}{$priv}).' '; if ($action eq 'modify') { if (grep(/^$tool$/,@{$available})) { $fixed .= ''.&mt('(on)').' '; @@ -2326,7 +2335,7 @@ sub default_privileges { $dynamic .= ' '."\n"; } - $dynamic .= ''."\n"; + $dynamic .= ''."\n"; } } if ($privcount == 0) { @@ -2510,15 +2519,15 @@ sub current_membership { $r->print(&check_uncheck_tools($r,$available)); $r->print(' - +
'.$lt{'curf'}.' -    -
-
+
'); } @@ -2553,14 +2562,14 @@ END 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('   '); } - $r->print(''); + $r->print('
'); } } my %Sortby = (); @@ -2588,25 +2597,25 @@ 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{'expi'}.'
'); } elsif ($$current{$user}{changestate} eq 'activate') { - $r->print('
'); + $lt{'acti'}.'
'); } - $r->print(''); + $lt{'dele'}.''); if ($specificity eq 'Yes') { - $r->print('
'); + ''); } $r->print(' '. @@ -2617,7 +2626,7 @@ END ''.$start.''. ''.$end.''); if ($hastools) { - $r->print(''. + $r->print(''. '      '); foreach my $tool (@{$$current{$user}{currtools}}) { if ($granularity eq 'Yes') { @@ -2633,23 +2642,23 @@ END } $r->print('   '); } - $r->print(''); + $r->print(''); } if ($addtools) { $r->print(''); if ($granularity eq 'Yes') { foreach my $tool (@{$$current{$user}{newtools}}) { - $r->print('   '); + '   '); } } else { foreach my $tool (@{$$current{$user}{newtools}}) { - $r->print('print(''.$tool. - '   '); + '   '); } } $r->print(''); @@ -2670,13 +2679,13 @@ sub check_uncheck_buttons {
'.$title.' - - +    - - +
'); @@ -2876,7 +2885,8 @@ sub member_privileges_form { '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 '. + '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, '. @@ -2954,7 +2964,7 @@ sub member_privileges_form { $r->print(''); $r->print(''. ''); + &mt($tool).''); my $privcount = 0; foreach my $priv (@{$showboxes{$tool}}) { $privcount ++; @@ -2968,15 +2978,16 @@ sub member_privileges_form { } else { $r->print(''); if ($privcount < @{$showboxes{$tool}}) { if (@{$showboxes{$tool}} > 2) { @@ -3221,36 +3232,49 @@ sub write_group_data { my $crspath = '/uploaded/'.$cdom.'/'.$cnum.'/'; my $boardsmap = $crspath.'group_boards_'.$groupname.'.sequence'; my $navmap = Apache::lonnavmaps::navmap->new(); - my $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); - $navmap = Apache::lonnavmaps::navmap->new(); - # modify parameter - if ($outcome eq 'ok') { - my $parm_result = &parm_setter($navmap,$cdom,$boardsmap, - $groupname); - if ($parm_result) { - $r->print('
' - .&mt('An error occurred while setting parameters ' - .'for Discussion Boards folder: ' - .'[_1]',$parm_result) - .'
'); + 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 { + $error = &mt('An error occurred while setting parameters '. + 'for Discussion Boards folder: '. + 'Could not retrieve course information' ); + } } else { - $r->print('
' - .&mt('Discussion Boards Folder created.') - .'
'); + $r->print($outcome); } - } else { - $r->print($outcome); } - undef($navmap); + } else { + $error = &mt("An error occurred while retrieving the contents of the group's folder.").'
'. + &mt('You need to re-initialize the course.'); + } + if ($error ne '') { + $r->print('
'.$error.'
'); } } $r->print('
' @@ -3471,17 +3495,28 @@ 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("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('
' + .&mt($ucgpterm.' membership list updated.') + .'
'); + $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.'
'); + $r->print('
' + .&mt("An error occurred while updating the $gpterm membership list:") + .'
'.$roster_result + .'
'); } return; } @@ -3497,7 +3532,6 @@ sub mapping_options { '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?", @@ -3522,19 +3556,19 @@ sub automapping { } $r->print(&Apache::lonhtmlcommon::topic_bar($image,$$lt{'endi'}).' '.$$lt{'gmma'}.':
'.$$lt{'adds'}.'
'.$$lt{'drops'}.'

- '.$$lt{'auad'}.':  - '); + '.$$lt{'auad'}.':  + '); if ($action eq 'modify') { - $r->print('    ('.$$lt{'curr'}.' '.$$lt{$add}.')'); + $r->print('    ('.&mt('Currently set to [_1].',''.$$lt{$add}.'').')'); } $r->print(' -
- '.$$lt{'auex'}.':  - '); +
+ '.$$lt{'auex'}.':  + '); 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 { @@ -3694,16 +3728,16 @@ sub member_privs_entries { if ($privcount == 3) { $dynamic .= '
'; } - $dynamic .=''; + ''; } } - $r->print(''.$dynamic.'
'. - $tool.'
'); } - $r->print(qq| -
$$toolprivs{$tool}{$priv} - - -   - -

|); + $r->print( + '
'.&mt($$toolprivs{$tool}{$priv}).'' +.'' +.' ' +.' ' +.'' +.'

' + ); $r->print('
'.$fixed.'
'); + $r->print(''.$fixed.''.$dynamic.''); } else { $r->print('
'.$tool.'
 
 
'); } @@ -3730,8 +3764,8 @@ sub date_setting_table { my $endform = &Apache::lonhtmlcommon::date_setter($formname, 'enddate',$endtime); my $perpetual = - ''; + ''; my $table = "\n". ''. ''. @@ -3747,7 +3781,9 @@ sub add_group_folder { my ($cdom,$cnum,$now,$groupname,$action,$description,$tools,$groupinfo, $gpterm,$ucgpterm,$crstype) = @_; if ($cdom eq '' || $cnum eq '') { - return &mt('Error: invalid course domain or number - group folder creation failed'); + return '' + .&mt('Error: invalid course domain or number - group folder creation failed.') + .''; } my ($outcome,$allgrpsmap,$grpmap,$boardsmap,$grppage,$warning); my $crspath = '/uploaded/'.$cdom.'/'.$cnum.'/'; @@ -3757,21 +3793,23 @@ sub add_group_folder { # check if group_allfolders.sequence exists. my $mapcontents = &Apache::lonnet::getfile($allgrpsmap); if ($mapcontents eq '-1') { #file does not exist; - my $grpstitle = &mt('[_1] [_2]s',$crstype,$ucgpterm); + 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.'); + $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; + return $outcome.$warning; } } my $delresult = &release_folder_lock($cdom,$cnum,'group_allfolders'); @@ -3779,7 +3817,9 @@ sub add_group_folder { $warning = $delresult ; } } else { - $outcome = &mt('Could not obtain exclusive lock to check status of the folder for all groups. No group folder added.'); + $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); @@ -3810,6 +3850,10 @@ sub add_group_folder { } my ($furl,$ferr)= &Apache::lonuserstate::readmap($cdom.'/'.$cnum); my $navmap = Apache::lonnavmaps::navmap->new(); + if (!defined($navmap)) { + return $warning.''.&mt('Error retrieving course contents'). + ' '.&mt('You need to re-initialize the course.').''; + } # modify parameters my $parm_result; if ($action eq 'create') { @@ -3855,7 +3899,10 @@ sub release_folder_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).'
'); + return ('
' + .&mt('Warning: failed to release lock for folder: [_1].',''.$folder_name.'') + .'
' + ); } else { return 'ok'; } @@ -3870,12 +3917,16 @@ sub map_updater { my $newmapurl=&Apache::lonnet::finishuserfileupload($cnum,$cdom,$itemname, $newfile); if ($newmapurl !~ m|^/uploaded|) { - $outcome = &mt('Error uploading new folder.')." ($newfile): $newmapurl".'
'; + $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".'
'; + $outcome = '
' + .&mt('Error reading contents of parent folder.')." ($parentmap): $errtext" + .'
'; return $outcome; } else { my $newidx=&LONCAPA::map::getresidx($newmapurl); @@ -3884,7 +3935,9 @@ sub map_updater { $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".'
'; + $outcome = '
' + .&mt('Error saving updated parent folder.')." ($parentmap): $errtext" + .'
'; return $outcome; } } @@ -3906,6 +3959,13 @@ sub new_map { sub parm_setter { my ($navmap,$cdom,$url,$groupname) = @_; my $allresults; + if (!defined($navmap)) { + $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, @@ -3934,7 +3994,10 @@ sub parm_setter { } } } else { - $allresults = &mt('Parameters not set for [_1] because the resource was not recognized as part of the course',$url).'
'; + $allresults = '
' + .&mt('Parameters not set for [_1] because the resource was not recognized' + .' as part of the course.',''.$url.'') + .'
'; } return $allresults; }
'.&mt('Start:').''.$startform.'