--- loncom/interface/domainprefs.pm 2007/09/26 12:42:32 1.30
+++ loncom/interface/domainprefs.pm 2008/01/01 18:48:17 1.38
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.30 2007/09/26 12:42:32 raeburn Exp $
+# $Id: domainprefs.pm,v 1.38 2008/01/01 18:48:17 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -68,10 +68,10 @@ sub handler {
my %domconfig =
&Apache::lonnet::get_dom('configuration',['login','rolecolors',
'quotas','autoenroll','autoupdate','directorysrch',
- 'usercreation','contacts'],$dom);
+ 'usercreation','usermodification','contacts'],$dom);
my @prefs_order = ('rolecolors','login','quotas','autoenroll',
'autoupdate','directorysrch','contacts',
- 'usercreation');
+ 'usercreation','usermodification');
my %prefs = (
'rolecolors' =>
{ text => 'Default color schemes',
@@ -127,11 +127,21 @@ sub handler {
'usercreation' =>
{ text => 'User creation',
help => 'Domain_User_Creation',
- header => [{col1 => 'Setting',
- col2 => 'Value',},
+ header => [{col1 => 'Format Rule Type',
+ col2 => 'Format Rules in force'},
+ {col1 => 'User account creation',
+ col2 => 'Usernames which may be created',},
{col1 => 'Context',
col2 => 'Assignable Authentication Types'}],
},
+ 'usermodification' =>
+ { text => 'User modification',
+ help => 'Domain_User_Modification',
+ header => [{col1 => 'Target user has role',
+ col2 => 'User information updateable in author context'},
+ {col1 => 'Target user has role',
+ col2 => 'User information updateable in course context'}],
+ },
);
my @roles = ('student','coordinator','author','admin');
my @actions = &Apache::loncommon::get_env_multiple('form.actions');
@@ -271,11 +281,24 @@ sub handler {
' /> '.
'
');
+ ' />'."\n".''."\n");
+ $seconddiv = 1;
+ }
}
- $r->print('
'.&mt('Display options').' '."\n".
+ $r->print(''.
+ &mt('Display options').' '."\n".
''.&mt('Display using: ')."\n".
' '.
&mt('one column').' '.
@@ -306,6 +329,8 @@ sub process_changes {
$output = &modify_directorysrch($dom,%domconfig);
} elsif ($action eq 'usercreation') {
$output = &modify_usercreation($dom,%domconfig);
+ } elsif ($action eq 'usermodification') {
+ $output = &modify_usermodification($dom,%domconfig);
} elsif ($action eq 'contacts') {
$output = &modify_contacts($dom,%domconfig);
}
@@ -327,7 +352,7 @@ sub print_config_box {
# ');
$rowtotal ++;
if (($action eq 'autoupdate') || ($action eq 'rolecolors') ||
- ($action eq 'usercreation')) {
+ ($action eq 'usercreation') || ($action eq 'usermodification')) {
my $colspan = ($action eq 'rolecolors')?' colspan="2"':'';
$output .= '
@@ -341,7 +366,9 @@ sub print_config_box {
if ($action eq 'autoupdate') {
$output .= &print_autoupdate('top',$dom,$settings,\$rowtotal);
} elsif ($action eq 'usercreation') {
- $output .= &print_usercreation('top',$dom,$settings,\$rowtotal);
+ $output .= &print_usercreation('top',$dom,$settings,\$rowtotal);
+ } elsif ($action eq 'usermodification') {
+ $output .= &print_usermodification('top',$dom,$settings,\$rowtotal);
} else {
$output .= &print_rolecolors($phase,'student',$dom,$confname,$settings,\$rowtotal);
}
@@ -360,7 +387,20 @@ sub print_config_box {
if ($action eq 'autoupdate') {
$output .= &print_autoupdate('bottom',$dom,$settings,\$rowtotal);
} elsif ($action eq 'usercreation') {
- $output .= &print_usercreation('bottom',$dom,$settings,\$rowtotal);
+ $output .= &print_usercreation('middle',$dom,$settings,\$rowtotal).'
+
+
+
+
+
+
+
+ '.$item->{'header'}->[2]->{'col1'}.'
+ '.$item->{'header'}->[2]->{'col2'}.' '.
+ &print_usercreation('bottom',$dom,$settings,\$rowtotal);
+ $rowtotal ++;
+ } elsif ($action eq 'usermodification') {
+ $output .= &print_usermodification('bottom',$dom,$settings,\$rowtotal);
} else {
$output .= &print_rolecolors($phase,'coordinator',$dom,$confname,$settings,\$rowtotal).'
@@ -460,18 +500,18 @@ function changePage(formname,newphase) {
} elsif ($phase eq 'display') {
$js .= &color_pick_js()."\n";
}
- $js .= &Apache::lonhtmlcommon::javascript_window_dims().'
+ $js .= &Apache::loncommon::viewport_size_js().'
';
my $additem;
if ($phase eq 'pickactions') {
my %loaditems = (
- 'onload' => "javascript:;getDimensions(document.$phase.width,document.$phase.height);setDisplayColumns();setFormElements(document.pickactions);",
+ 'onload' => "javascript:getViewportDims(document.$phase.width,document.$phase.height);setDisplayColumns();setFormElements(document.pickactions);",
);
$additem = {'add_entries' => \%loaditems,};
} else {
my %loaditems = (
- 'onload' => "javascript:getDimensions(document.$phase.width,document.$phase.height)",
+ 'onload' => "javascript:getViewportDims(document.$phase.width,document.$phase.height);",
);
$additem = {'add_entries' => \%loaditems,};
}
@@ -1056,14 +1096,7 @@ sub print_autoupdate {
my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);
my @fields = ('lastname','firstname','middlename','gen',
'permanentemail','id');
- my %fieldtitles = &Apache::lonlocal::texthash (
- id => 'Student/Employee ID',
- permanentemail => 'E-mail address',
- lastname => 'Last Name',
- firstname => 'First Name',
- middlename => 'Middle Name',
- gen => 'Generation',
- );
+ my %fieldtitles = &Apache::loncommon::personal_data_fieldtitles();
my $numrows = 0;
if (ref($types) eq 'ARRAY') {
if (@{$types} > 0) {
@@ -1289,39 +1322,80 @@ sub contact_titles {
sub print_usercreation {
my ($position,$dom,$settings,$rowtotal) = @_;
my $numinrow = 4;
- my ($rules,$ruleorder) = &Apache::lonnet::inst_userrules($dom);
my $datatable;
- my %lt = &Apache::lonlocal::texthash (
- nondc => 'User creation other than by Domain Coordinator: ',
- author => 'When adding a co-author/assistant author',
- course => 'When adding users to a course',
- );
if ($position eq 'top') {
+ $$rowtotal ++;
+ my $rowcount = 0;
+ my ($rules,$ruleorder) = &Apache::lonnet::inst_userrules($dom,'username');
+ if (ref($rules) eq 'HASH') {
+ if (keys(%{$rules}) > 0) {
+ $datatable .= &user_formats_row('username',$settings,$rules,
+ $ruleorder,$numinrow,$rowcount);
+ $$rowtotal ++;
+ $rowcount ++;
+ }
+ }
+ my ($idrules,$idruleorder) = &Apache::lonnet::inst_userrules($dom,'id');
+ if (ref($idrules) eq 'HASH') {
+ if (keys(%{$idrules}) > 0) {
+ $datatable .= &user_formats_row('id',$settings,$idrules,
+ $idruleorder,$numinrow,$rowcount);
+ $$rowtotal ++;
+ $rowcount ++;
+ }
+ }
+ } elsif ($position eq 'middle') {
+ my @creators = ('author','course');
+ my ($rules,$ruleorder) =
+ &Apache::lonnet::inst_userrules($dom,'username');
+ my %lt = &usercreation_types();
my %checked;
if (ref($settings) eq 'HASH') {
- if (ref($settings->{'cancreate'}) eq 'ARRAY') {
- foreach my $item (@{$settings->{'cancreate'}}) {
- $checked{$item} = ' checked="checked" ';
+ if (ref($settings->{'cancreate'}) eq 'HASH') {
+ foreach my $item (@creators) {
+ $checked{$item} = $settings->{'cancreate'}{$item};
+ }
+ } elsif (ref($settings->{'cancreate'}) eq 'ARRAY') {
+ foreach my $item (@creators) {
+ if (grep(/^\Q$item\E$/,@{$settings->{'cancreate'}})) {
+ $checked{$item} = 'none';
+ }
}
}
}
- $datatable = ' '.
- ''.$lt{'nondc'}.
- ' ';
- $$rowtotal ++;
- if (ref($rules) eq 'HASH') {
- if (keys(%{$rules}) > 0) {
- $datatable .= &username_formats_row($settings,$rules,
- $ruleorder,$numinrow);
- $$rowtotal ++;
+ my $rownum = 0;
+ foreach my $item (@creators) {
+ $rownum ++;
+ if ($checked{$item} eq '') {
+ $checked{$item} = 'any';
+ }
+ my $css_class;
+ if ($rownum%2) {
+ $css_class = '';
+ } else {
+ $css_class = ' class="LC_odd_row" ';
+ }
+ $datatable .= ''.
+ ''.$lt{$item}.
+ ' ';
+ my @options = ('any');
+ if (ref($rules) eq 'HASH') {
+ if (keys(%{$rules}) > 0) {
+ push(@options,('official','unofficial'));
+ }
+ }
+ push(@options,'none');
+ foreach my $option (@options) {
+ my $check = ' ';
+ if ($checked{$item} eq $option) {
+ $check = ' checked="checked" ';
+ }
+ $datatable .= ''.
+ ' '.
+ $lt{$option}.' ';
}
+ $datatable .= ' ';
}
} else {
my @contexts = ('author','course','domain');
@@ -1339,8 +1413,13 @@ sub print_usercreation {
}
}
}
+ } else {
+ foreach my $item (@contexts) {
+ foreach my $auth (@authtypes) {
+ $checked{$item}{$auth} = ' checked="checked" ';
+ }
+ }
}
- my @authtypes = ('int','krb4','krb5','loc');
my %title = &context_names();
my %authname = &authtype_names();
my $rownum = 0;
@@ -1369,13 +1448,19 @@ sub print_usercreation {
return $datatable;
}
-sub username_formats_row {
- my ($settings,$rules,$ruleorder,$numinrow) = @_;
- my $output = ''.
- ''.
- &mt('Format rules to check for new usernames: ').
- ' '.
- '';
+sub user_formats_row {
+ my ($type,$settings,$rules,$ruleorder,$numinrow,$rowcount) = @_;
+ my $output;
+ my %text = (
+ 'username' => 'new usernames',
+ 'id' => 'IDs',
+ );
+ my $css_class = $rowcount%2?' class="LC_odd_row"':'';
+ $output = ''.
+ ''.
+ &mt("Format rules to check for $text{$type}: ").
+ ' '.
+ '';
my $rem;
if (ref($ruleorder) eq 'ARRAY') {
for (my $i=0; $i<@{$ruleorder}; $i++) {
@@ -1388,14 +1473,14 @@ sub username_formats_row {
$output .= '';
}
my $check = ' ';
- if (ref($settings->{'username_rule'}) eq 'ARRAY') {
- if (grep(/^\Q$ruleorder->[$i]\E$/,@{$settings->{'username_rule'}})) {
+ if (ref($settings->{$type.'_rule'}) eq 'ARRAY') {
+ if (grep(/^\Q$ruleorder->[$i]\E$/,@{$settings->{$type.'_rule'}})) {
$check = ' checked="checked" ';
}
}
$output .= ''.
''.
- ' [$i].'"'.$check.'/>'.
$rules->{$ruleorder->[$i]}{'name'}.' ';
}
@@ -1413,6 +1498,18 @@ sub username_formats_row {
return $output;
}
+sub usercreation_types {
+ my %lt = &Apache::lonlocal::texthash (
+ author => 'When adding a co-author',
+ course => 'When adding a user to a course',
+ any => 'Any',
+ official => 'Institutional only ',
+ unofficial => 'Non-institutional only',
+ none => 'None',
+ );
+ return %lt;
+}
+
sub authtype_names {
my %lt = &Apache::lonlocal::texthash(
int => 'Internal',
@@ -1432,6 +1529,96 @@ sub context_names {
return %context_title;
}
+sub print_usermodification {
+ my ($position,$dom,$settings,$rowtotal) = @_;
+ my $numinrow = 4;
+ my ($context,$datatable,$rowcount);
+ if ($position eq 'top') {
+ $rowcount = 0;
+ $context = 'author';
+ foreach my $role ('ca','aa') {
+ $datatable .= &modifiable_userdata_row($context,$role,$settings,
+ $numinrow,$rowcount);
+ $$rowtotal ++;
+ $rowcount ++;
+ }
+ } else {
+ $context = 'course';
+ $rowcount = 0;
+ foreach my $role ('st','ep','ta','in','cr') {
+ $datatable .= &modifiable_userdata_row($context,$role,$settings,
+ $numinrow,$rowcount);
+ $$rowtotal ++;
+ $rowcount ++;
+ }
+ }
+ return $datatable;
+}
+
+sub modifiable_userdata_row {
+ my ($context,$role,$settings,$numinrow,$rowcount) = @_;
+ my $rolename;
+ if ($role eq 'cr') {
+ $rolename = &mt('Custom role');
+ } else {
+ $rolename = &Apache::lonnet::plaintext($role);
+ }
+ my @fields = ('lastname','firstname','middlename','generation',
+ 'permanentemail','id');
+ my %fieldtitles = &Apache::loncommon::personal_data_fieldtitles();
+ my $output;
+ my $css_class = $rowcount%2?' class="LC_odd_row"':'';
+ $output = ' '.
+ ''.$rolename.' '.
+ ' ';
+ return $output;
+}
sub users_cansearch_row {
my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle) = @_;
@@ -1944,7 +2131,7 @@ sub check_configuser {
sub check_authorstatus {
my ($dom,$confname,%currroles) = @_;
my $author_ok;
- if (!$currroles{':'.$dom.':au'}) {
+ if (!$currroles{$confname.':'.$dom.':au'}) {
my $start = time;
my $end = 0;
$author_ok =
@@ -2706,7 +2893,7 @@ sub modify_contacts {
}
$resulttext .= '';
} else {
- $resulttext = &mt('No changes made to contact information.');
+ $resulttext = &mt('No changes made to contact information');
}
} else {
$resulttext = ''.
@@ -2717,7 +2904,7 @@ sub modify_contacts {
sub modify_usercreation {
my ($dom,%domconfig) = @_;
- my ($resulttext,%curr_usercreation,%changes,%authallowed);
+ my ($resulttext,%curr_usercreation,%changes,%authallowed,%cancreate);
if (ref($domconfig{'usercreation'}) eq 'HASH') {
foreach my $key (keys(%{$domconfig{'usercreation'}})) {
$curr_usercreation{$key} = $domconfig{'usercreation'}{$key};
@@ -2728,21 +2915,35 @@ sub modify_usercreation {
course => 'adding users to a course',
);
my @username_rule = &Apache::loncommon::get_env_multiple('form.username_rule');
- my @cancreate = &Apache::loncommon::get_env_multiple('form.can_createuser');
- if (ref($curr_usercreation{'cancreate'}) eq 'ARRAY') {
- foreach my $type (@{$curr_usercreation{'cancreate'}}) {
- if (!grep(/^\Q$type\E$/,@cancreate)) {
- push(@{$changes{'cancreate'}},$type);
- }
+ my @id_rule = &Apache::loncommon::get_env_multiple('form.id_rule');
+ my @contexts = ('author','course');
+ foreach my $item(@contexts) {
+ $cancreate{$item} = $env{'form.can_createuser_'.$item};
+ }
+ if (ref($curr_usercreation{'cancreate'}) eq 'HASH') {
+ foreach my $item (@contexts) {
+ if ($curr_usercreation{'cancreate'}{$item} ne $cancreate{$item}) {
+ push(@{$changes{'cancreate'}},$item);
+ }
}
- foreach my $type (@cancreate) {
- if (!grep(/^\Q$type\E$/,@{$curr_usercreation{'cancreate'}})) {
- push(@{$changes{'cancreate'}},$type);
+ } elsif (ref($curr_usercreation{'cancreate'}) eq 'ARRAY') {
+ foreach my $item (@contexts) {
+ if (grep(/^\Q$item\E$/,@{$curr_usercreation{'cancreate'}})) {
+ if ($cancreate{$item} ne 'any') {
+ push(@{$changes{'cancreate'}},$item);
+ }
+ } else {
+ if ($cancreate{$item} ne 'none') {
+ push(@{$changes{'cancreate'}},$item);
+ }
}
}
} else {
- push(@{$changes{'cancreate'}},@cancreate);
+ foreach my $item ('author','course') {
+ push(@{$changes{'cancreate'}},$item);
+ }
}
+
if (ref($curr_usercreation{'username_rule'}) eq 'ARRAY') {
foreach my $type (@{$curr_usercreation{'username_rule'}}) {
if (!grep(/^\Q$type\E$/,@username_rule)) {
@@ -2758,6 +2959,21 @@ sub modify_usercreation {
push(@{$changes{'username_rule'}},@username_rule);
}
+ if (ref($curr_usercreation{'id_rule'}) eq 'ARRAY') {
+ foreach my $type (@{$curr_usercreation{'id_rule'}}) {
+ if (!grep(/^\Q$type\E$/,@id_rule)) {
+ push(@{$changes{'id_rule'}},$type);
+ }
+ }
+ foreach my $type (@id_rule) {
+ if (!grep(/^\Q$type\E$/,@{$curr_usercreation{'id_rule'}})) {
+ push(@{$changes{'id_rule'}},$type);
+ }
+ }
+ } else {
+ push(@{$changes{'id_rule'}},@id_rule);
+ }
+
my @contexts = ('author','course','domain');
my @authtypes = ('int','krb4','krb5','loc');
my %authhash;
@@ -2790,9 +3006,10 @@ sub modify_usercreation {
my %usercreation_hash = (
usercreation => {
- cancreate => \@cancreate,
+ cancreate => \%cancreate,
username_rule => \@username_rule,
- authtypes => \%authhash,
+ id_rule => \@id_rule,
+ authtypes => \%authhash,
}
);
@@ -2802,19 +3019,24 @@ sub modify_usercreation {
if (keys(%changes) > 0) {
$resulttext = &mt('Changes made:').'';
if (ref($changes{'cancreate'}) eq 'ARRAY') {
- my $chgtext = '';
- foreach my $type (@cancreate) {
- $chgtext .= ''.$title{$type}.' ';
- }
- $chgtext .= ' ';
- if (@cancreate > 0) {
- $resulttext .= ''.&mt('Creation of new users is permitted by a Domain Coordinator, and also by other users when: ').$chgtext.' ';
- } else {
- $resulttext .= ''.&mt("Creation of new users is now only allowed when the user's role is Domain Coordinator.").' ';
+ my %lt = &usercreation_types();
+ foreach my $type (@{$changes{'cancreate'}}) {
+ my $chgtext;
+ if ($cancreate{$type} eq 'none') {
+ $chgtext = $lt{$type}.' '.&mt('creation of new users is not permitted, except by a Domain Coordinator.');
+ } elsif ($cancreate{$type} eq 'any') {
+ $chgtext = $lt{$type}.' '.&mt('creation of new users is permitted for both institutional and non-institutional usernames.');
+ } elsif ($cancreate{$type} eq 'official') {
+ $chgtext = $lt{$type}.' '.&mt('creation of new users is only permitted for institutional usernames.',$lt{$type});
+ } elsif ($cancreate{$type} eq 'unofficial') {
+ $chgtext = $lt{$type}.' '.&mt('creation of new users is only permitted for non-institutional usernames.',$lt{$type});
+ }
+ $resulttext .= ''.$chgtext.' ';
}
}
if (ref($changes{'username_rule'}) eq 'ARRAY') {
- my ($rules,$ruleorder) = &Apache::lonnet::inst_userrules($dom);
+ my ($rules,$ruleorder) =
+ &Apache::lonnet::inst_userrules($dom,'username');
my $chgtext = '';
foreach my $type (@username_rule) {
if (ref($rules->{$type}) eq 'HASH') {
@@ -2828,10 +3050,25 @@ sub modify_usercreation {
$resulttext .= ''.&mt('There are now no username formats restricted to verified users in the institutional directory.').' ';
}
}
+ if (ref($changes{'id_rule'}) eq 'ARRAY') {
+ my ($idrules,$idruleorder) =
+ &Apache::lonnet::inst_userrules($dom,'id');
+ my $chgtext = '';
+ foreach my $type (@id_rule) {
+ if (ref($idrules->{$type}) eq 'HASH') {
+ $chgtext .= ''.$idrules->{$type}{'name'}.' ';
+ }
+ }
+ $chgtext .= ' ';
+ if (@id_rule > 0) {
+ $resulttext .= ''.&mt('IDs with the following formats are restricted to verified users in the institutional directory: ').$chgtext.' ';
+ } else {
+ $resulttext .= ''.&mt('There are now no ID formats restricted to verified users in the institutional directory.').' ';
+ }
+ }
my %authname = &authtype_names();
my %context_title = &context_names();
if (ref($changes{'authtypes'}) eq 'ARRAY') {
- my @unchanged;
my $chgtext = '';
foreach my $type (@{$changes{'authtypes'}}) {
my @allowed;
@@ -2853,6 +3090,106 @@ sub modify_usercreation {
}
} else {
$resulttext = ''.
+ &mt('An error occurred: [_1]',$putresult).' ';
+ }
+ return $resulttext;
+}
+
+sub modify_usermodification {
+ my ($dom,%domconfig) = @_;
+ my ($resulttext,%curr_usermodification,%changes);
+ if (ref($domconfig{'usermodification'}) eq 'HASH') {
+ foreach my $key (keys(%{$domconfig{'usermodification'}})) {
+ $curr_usermodification{$key} = $domconfig{'usermodification'}{$key};
+ }
+ }
+ my @contexts = ('author','course');
+ my %context_title = (
+ author => 'In author context',
+ course => 'In course context',
+ );
+ my @fields = ('lastname','firstname','middlename','generation',
+ 'permanentemail','id');
+ my %roles = (
+ author => ['ca','aa'],
+ course => ['st','ep','ta','in','cr'],
+ );
+ my %fieldtitles = &Apache::loncommon::personal_data_fieldtitles();
+ my %modifyhash;
+ foreach my $context (@contexts) {
+ foreach my $role (@{$roles{$context}}) {
+ my @modifiable = &Apache::loncommon::get_env_multiple('form.canmodify_'.$role);
+ foreach my $item (@fields) {
+ if (grep(/^\Q$item\E$/,@modifiable)) {
+ $modifyhash{$context}{$role}{$item} = 1;
+ } else {
+ $modifyhash{$context}{$role}{$item} = 0;
+ }
+ }
+ }
+ if (ref($curr_usermodification{$context}) eq 'HASH') {
+ foreach my $role (@{$roles{$context}}) {
+ if (ref($curr_usermodification{$context}{$role}) eq 'HASH') {
+ foreach my $field (@fields) {
+ if ($modifyhash{$context}{$role}{$field} ne
+ $curr_usermodification{$context}{$role}{$field}) {
+ push(@{$changes{$context}},$role);
+ last;
+ }
+ }
+ }
+ }
+ } else {
+ foreach my $context (@contexts) {
+ foreach my $role (@{$roles{$context}}) {
+ push(@{$changes{$context}},$role);
+ }
+ }
+ }
+ }
+ my %usermodification_hash = (
+ usermodification => \%modifyhash,
+ );
+ my $putresult = &Apache::lonnet::put_dom('configuration',
+ \%usermodification_hash,$dom);
+ if ($putresult eq 'ok') {
+ if (keys(%changes) > 0) {
+ $resulttext = &mt('Changes made: ').'';
+ foreach my $context (@contexts) {
+ if (ref($changes{$context}) eq 'ARRAY') {
+ $resulttext .= ''.$context_title{$context}.':';
+ if (ref($changes{$context}) eq 'ARRAY') {
+ foreach my $role (@{$changes{$context}}) {
+ my $rolename;
+ if ($role eq 'cr') {
+ $rolename = &mt('Custom');
+ } else {
+ $rolename = &Apache::lonnet::plaintext($role);
+ }
+ my @modifiable;
+ $resulttext .= ''.&mt('Target user with [_1] role',$rolename).' - '.&mt('modifiable fields: ');
+ foreach my $field (@fields) {
+ if ($modifyhash{$context}{$role}{$field}) {
+ push(@modifiable,$fieldtitles{$field});
+ }
+ }
+ if (@modifiable > 0) {
+ $resulttext .= join(', ',@modifiable);
+ } else {
+ $resulttext .= &mt('none');
+ }
+ $resulttext .= ' ';
+ }
+ $resulttext .= ' ';
+ }
+ }
+ }
+ $resulttext .= ' ';
+ } else {
+ $resulttext = &mt('No changes made to user modification settings');
+ }
+ } else {
+ $resulttext = ''.
&mt('An error occurred: [_1]',$putresult).' ';
}
return $resulttext;