--- loncom/interface/domainprefs.pm 2009/02/09 03:42:03 1.87
+++ loncom/interface/domainprefs.pm 2009/07/25 14:44:50 1.98
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.87 2009/02/09 03:42:03 raeburn Exp $
+# $Id: domainprefs.pm,v 1.98 2009/07/25 14:44:50 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -37,6 +37,7 @@ use Apache::loncommon();
use Apache::lonhtmlcommon();
use Apache::lonlocal;
use Apache::lonmsg();
+use Apache::lonconfigsettings;
use LONCAPA qw(:DEFAULT :match);
use LONCAPA::Enrollment;
use LONCAPA::lonauthcgi();
@@ -53,6 +54,7 @@ sub handler {
return OK;
}
+ my $context = 'domain';
my $dom = $env{'request.role.domain'};
my $domdesc = &Apache::lonnet::domain($dom,'description');
if (&Apache::lonnet::allowed('mau',$dom)) {
@@ -106,7 +108,7 @@ sub handler {
col2 => 'Value'}],
},
'quotas' =>
- { text => 'User blogs, home pages and portfolios',
+ { text => 'User blogs, personal information pages and portfolios',
help => 'Domain_Configuration_Quotas',
header => [{col1 => 'User affiliation',
col2 => 'Available tools',
@@ -160,7 +162,7 @@ sub handler {
col2 => 'Information settable when self-creating account (if directory data blank)'}],
},
'scantron' =>
- { text => 'Scantron format file',
+ { text => 'Bubblesheet format file',
help => 'Domain_Configuration_Scantron_Format',
header => [ {col1 => 'Item',
col2 => '',
@@ -197,98 +199,10 @@ sub handler {
text=>"Pick functionality"});
my $confname = $dom.'-domainconfig';
if ($phase eq 'process') {
- &Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"javascript:changePage(document.$phase,'display')",
- text=>"Domain Configuration"},
- {href=>"javascript:changePage(document.$phase,'$phase')",
- text=>"Updated"});
- &print_header($r,$phase);
- foreach my $item (@prefs_order) {
- if (grep(/^\Q$item\E$/,@actions)) {
- $r->print('
'.&mt($prefs{$item}{'text'}).' '.
- &process_changes($r,$dom,$confname,$item,
- \@roles,%domconfig));
- }
- }
- $r->print('');
- &print_footer($r,$phase,'display','Back to configuration display',
- \@actions);
- $r->print('
');
+ &Apache::lonconfigsettings::make_changes($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,\@roles);
} elsif ($phase eq 'display') {
- &Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"javascript:changePage(document.$phase,'display')",
- text=>"Domain Configuration"});
- &print_header($r,$phase);
- if (@actions > 0) {
- my $rowsum = 0;
- my (%output,%rowtotal,@items);
- my $halfway = @actions/2;
- foreach my $item (@prefs_order) {
- if (grep(/^\Q$item\E$/,@actions)) {
- push(@items,$item);
- ($output{$item},$rowtotal{$item}) =
- &print_config_box($r,$dom,$confname,$phase,
- $item,$prefs{$item},
- $domconfig{$item});
- $rowsum += $rowtotal{$item};
- }
- }
- my $colend;
- my $halfway = $rowsum/2;
- my $aggregate = 0;
- my $sumleft = 0;
- my $sumright = 0;
- my $crossover;
- for (my $i=0; $i<@items; $i++) {
- $aggregate += $rowtotal{$items[$i]};
- if ($aggregate > $halfway) {
- $crossover = $i;
- last;
- }
- }
- for (my $i=0; $i<$crossover; $i++) {
- $sumleft += $rowtotal{$items[$i]};
- }
- for (my $i=$crossover+1; $i<@items; $i++) {
- $sumright += $rowtotal{$items[$i]};
- }
- if ((@items > 1) && ($env{'form.numcols'} == 2)) {
- my $sumdiff = $sumright - $sumleft;
- if ($sumdiff > 0) {
- $colend = $crossover + 1;
- } else {
- $colend = $crossover;
- }
- } else {
- $colend = @items;
- }
- $r->print('
');
- for (my $i=0; $i<$colend; $i++) {
- $r->print($output{$items[$i]});
- }
- $r->print(' ');
- if ($colend < @items) {
- for (my $i=$colend; $i<@items; $i++) {
- $r->print($output{$items[$i]});
- }
- }
- $r->print('
');
- $r->print(&print_footer($r,$phase,'process','Save',\@actions));
- } else {
- $r->print(' '.
- ' '."\n".
- ''.&mt('No settings chosen').
- ' ');
- }
- $r->print('');
- $r->print(&Apache::loncommon::end_page());
+ &Apache::lonconfigsettings::display_settings($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname);
} else {
- if ($phase eq '') {
- $phase = 'pickactions';
- }
- my %helphash;
- &print_header($r,$phase);
if (keys(%domconfig) == 0) {
my $primarylibserv = &Apache::lonnet::domain($dom,'primary');
my @ids=&Apache::lonnet::current_machine_ids();
@@ -307,6 +221,7 @@ sub handler {
}
}
if ($custom_img_count > 0) {
+ &Apache::lonconfigsettings::print_header($r,$phase,$context);
my $switch_server = &check_switchserver($dom,$confname);
$r->print(
&mt('Domain configuration settings have yet to be saved for this domain via the web-based domain preferences interface.').' '.
@@ -316,53 +231,22 @@ sub handler {
if ($switch_server) {
$r->print($switch_server.' '.&mt('to primary library server for domain: [_1]',$dom));
}
+ $r->print(&Apache::loncommon::end_page());
return OK;
}
}
}
- $r->print(''.&mt('Functionality to display/modify').' ');
- $r->print(''."\n".' '.
- '
');
- my ($numitems,$midpoint,$seconddiv,$count);
- $numitems = @prefs_order;
- $midpoint = int($numitems/2);
- if ($numitems%2) {
- $midpoint ++;
- }
- $count = 0;
- foreach my $item (@prefs_order) {
- $r->print('
'.
- &Apache::loncommon::help_open_topic($prefs{$item}->{'help'}).
- ' '.&mt($prefs{$item}->{'text'}).' ');
- $count ++;
- if ((!$seconddiv) && ($count >= $midpoint)) {
- $r->print(''."\n".''."\n");
- $seconddiv = 1;
- }
- }
- $r->print('
'.
- &mt('Display options').' '."\n".
- ''.&mt('Display using: ')."\n".
- ' '.
- &mt('one column').' '.
- ' '.
- &mt('two columns').'
');
- $r->print(&print_footer($r,$phase,'display','Go'));
- $r->print('');
- $r->print(&Apache::loncommon::end_page());
+ &Apache::lonconfigsettings::display_choices($r,$phase,$context,\@prefs_order,\%prefs);
}
return OK;
}
sub process_changes {
- my ($r,$dom,$confname,$action,$roles,%domconfig) = @_;
+ my ($r,$dom,$confname,$action,$roles,$values) = @_;
+ my %domconfig;
+ if (ref($values) eq 'HASH') {
+ %domconfig = %{$values};
+ }
my $output;
if ($action eq 'login') {
$output = &modify_login($r,$dom,$confname,%domconfig);
@@ -403,7 +287,7 @@ sub print_config_box {
my $output;
if ($action eq 'coursecategories') {
$output = &coursecategories_javascript($settings);
- }
+ }
$output .=
'
@@ -578,107 +462,6 @@ sub print_config_box {
return ($output,$rowtotal);
}
-sub print_header {
- my ($r,$phase) = @_;
- my $alert = &mt('You must select at least one functionality type to display.');
- my $js = '
-
-';
- my $additem;
- if ($phase eq 'pickactions') {
- my %loaditems = (
- 'onload' => "javascript:getViewportDims(document.$phase.width,document.$phase.height);setDisplayColumns();setFormElements(document.pickactions);",
- );
- $additem = {'add_entries' => \%loaditems,};
- } else {
- my %loaditems = (
- 'onload' => "javascript:getViewportDims(document.$phase.width,document.$phase.height);",
- );
- $additem = {'add_entries' => \%loaditems,};
- }
- $r->print(&Apache::loncommon::start_page('View/Modify Domain Settings',
- $js,$additem));
- $r->print(&Apache::lonhtmlcommon::breadcrumbs('Domain Settings'));
- $r->print('
-
-');
- $r->print(''.&Apache::loncommon::end_page());
- }
- return;
-}
-
sub print_login {
my ($dom,$confname,$phase,$settings,$rowtotal) = @_;
my %choices = &login_choices();
@@ -851,6 +634,7 @@ sub print_rolecolors {
my %defaults = (
img => $defaultdesign{$role.'.img'},
font => $defaultdesign{$role.'.font'},
+ fontmenu => $defaultdesign{$role.'.fontmenu'},
);
foreach my $item (@bgs) {
$defaults{'bgs'}{$item} = $defaultdesign{$role.'.'.$item};
@@ -868,6 +652,10 @@ sub print_rolecolors {
$designs{'font'} = $settings->{$role}->{'font'};
$is_custom{'font'} = 1;
}
+ if ($settings->{$role}->{'fontmenu'} ne '') {
+ $designs{'fontmenu'} = $settings->{$role}->{'fontmenu'};
+ $is_custom{'fontmenu'} = 1;
+ }
foreach my $item (@bgs) {
if ($settings->{$role}->{$item} ne '') {
$designs{'bgs'}{$item} = $settings->{$role}->{$item};
@@ -886,6 +674,10 @@ sub print_rolecolors {
$designs{img} = $designhash{$dom.'.'.$role.'.img'};
$is_custom{'img'} = 1;
}
+ if ($designhash{$dom.'.'.$role.'.fontmenu'} ne '') {
+ $designs{fontmenu} = $designhash{$dom.'.'.$role.'.fontmenu'};
+ $is_custom{'fontmenu'} = 1;
+ }
if ($designhash{$dom.'.'.$role.'.font'} ne '') {
$designs{font} = $designhash{$dom.'.'.$role.'.font'};
$is_custom{'font'} = 1;
@@ -914,7 +706,7 @@ sub display_color_options {
my ($dom,$confname,$phase,$role,$itemcount,$choices,$is_custom,$defaults,$designs,
$images,$bgs,$links,$alt_text,$rowtotal,$logintext,$loginheader) = @_;
my $css_class = $itemcount%2?' class="LC_odd_row"':'';
- my $datatable = ' '.
+ my $datatable = ' '.
''.$choices->{'font'}.' ';
if (!$is_custom->{'font'}) {
$datatable .= ''.&mt('Default in use:').' '.$defaults->{'font'}.' ';
@@ -928,6 +720,20 @@ sub display_color_options {
' '.
' ';
+ $datatable .= ''.
+ ''.$choices->{'fontmenu'}.' ';
+ if (!$is_custom->{'fontmenu'}) {
+ $datatable .= ''.&mt('Default in use:').' '.$defaults->{'fontmenu'}.' ';
+ } else {
+ $datatable .= ' ';
+ }
+ $fontlink = &color_pick($phase,$role,'fontmenu',$choices->{'fontmenu'},$designs->{'fontmenu'});
+ $datatable .= ''.
+ ' '.$fontlink.
+ ' '.
+ ' ';
my $switchserver = &check_switchserver($dom,$confname);
foreach my $img (@{$images}) {
$itemcount ++;
@@ -1200,52 +1006,6 @@ sub color_pick {
return $link;
}
-sub color_pick_js {
- my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();
- my $output = <<"ENDCOL";
- function pclose() {
- parmwin=window.open("/adm/rat/empty.html","LONCAPAparms","height=350,width=350,scrollbars=no,menubar=no");
- parmwin.close();
- }
-
- $pjump_def
-
- function psub() {
- pclose();
- if (document.parmform.pres_marker.value!='') {
- if (document.parmform.pres_type.value!='') {
- eval('document.display.'+
- document.parmform.pres_marker.value+
- '.value=document.parmform.pres_value.value;');
- }
- } else {
- document.parmform.pres_value.value='';
- document.parmform.pres_marker.value='';
- }
- }
-
- function get_id (span_id) {
- if (document.getElementById) {
- return document.getElementById(span_id);
- }
- if (document.all) {
- return document.all[span_id];
- }
- return false;
- }
-
- function colchg_span (span_id_str,new_color_item) {
- var span_ref = get_id(span_id_str);
- if (span_ref.style) { span_ref = span_ref.style; }
- span_ref.background = new_color_item.value;
- span_ref.backgroundColor = new_color_item.value;
- span_ref.bgColor = new_color_item.value;
- }
-
-ENDCOL
- return $output;
-}
-
sub print_quotas {
my ($dom,$settings,$rowtotal,$action) = @_;
my $context;
@@ -1259,7 +1019,7 @@ sub print_quotas {
my $typecount = 0;
my $css_class;
if ($context eq 'requestcourses') {
- @usertools = ('official','unofficial');
+ @usertools = ('official','unofficial','community');
} else {
@usertools = ('aboutme','blog','portfolio');
}
@@ -1357,7 +1117,9 @@ sub print_quotas {
$typecount ++;
$css_class = $typecount%2?' class="LC_odd_row"':'';
$datatable .= ''.
- ' '.&mt('LON-CAPA Advanced Users').' '.
+ ''.&mt('LON-CAPA Advanced Users').
+ ' ('.
+ &mt('overrides affiliation').') '.
' ';
foreach my $item (@usertools) {
my $checked;
@@ -1378,8 +1140,7 @@ sub print_quotas {
'" value="_LC_adv" '.$checked.'/>'.$titles{$item}.
' ';
}
- $datatable .= '('.&mt('overrides affiliation').
- ') ';
+ $datatable .= '';
$$rowtotal += $typecount;
return $datatable;
}
@@ -1562,8 +1323,8 @@ sub print_directorysrch {
$$rowtotal += 2;
if (ref($usertypes) eq 'HASH') {
if (keys(%{$usertypes}) > 0) {
- $datatable .= &users_cansearch_row($settings,$types,$usertypes,$dom,
- $numinrow,$othertitle);
+ $datatable .= &insttypes_row($settings,$types,$usertypes,$dom,
+ $numinrow,$othertitle,'cansearch');
$cansrchrow = 1;
}
}
@@ -1578,7 +1339,7 @@ sub print_directorysrch {
foreach my $title (@{$titleorder}) {
if (defined($searchtitles->{$title})) {
my $check = ' ';
- if (ref($settings) eq 'HASH') {
+ if (ref($settings) eq 'HASH') {
if (ref($settings->{'searchby'}) eq 'ARRAY') {
if (grep(/^\Q$title\E$/,@{$settings->{'searchby'}})) {
$check = ' checked="checked" ';
@@ -1620,7 +1381,7 @@ sub print_contacts {
my $datatable;
my @contacts = ('adminemail','supportemail');
my (%checked,%to,%otheremails);
- my @mailings = ('errormail','packagesmail','helpdeskmail');
+ my @mailings = ('errormail','packagesmail','lonstatusmail','helpdeskmail');
foreach my $type (@mailings) {
$otheremails{$type} = '';
}
@@ -1640,6 +1401,8 @@ sub print_contacts {
}
$otheremails{$type} = $settings->{$type}{'others'};
}
+ } elsif ($type eq 'lonstatusmail') {
+ $checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" ';
}
}
} else {
@@ -1647,7 +1410,8 @@ sub print_contacts {
$to{'adminemail'} = $Apache::lonnet::perlvar{'lonAdmEMail'};
$checked{'errormail'}{'adminemail'} = ' checked="checked" ';
$checked{'packagesmail'}{'adminemail'} = ' checked="checked" ';
- $checked{'helpdeskmail'}{'supportemail'} = ' checked="checked" ';
+ $checked{'helpdeskmail'}{'supportemail'} = ' checked="checked" ';
+ $checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" ';
}
my ($titles,$short_titles) = &contact_titles();
my $rownum = 0;
@@ -1691,7 +1455,8 @@ sub contact_titles {
'adminemail' => 'Default Server Admin E-mail address',
'errormail' => 'Error reports to be e-mailed to',
'packagesmail' => 'Package update alerts to be e-mailed to',
- 'helpdeskmail' => 'Helpdesk requests to be e-mailed to'
+ 'helpdeskmail' => 'Helpdesk requests to be e-mailed to',
+ 'lonstatusmail' => 'E-mail from nightly status check (warnings/errors)',
);
my %short_titles = &Apache::lonlocal::texthash (
adminemail => 'Admin E-mail address',
@@ -1702,10 +1467,12 @@ sub contact_titles {
sub tool_titles {
my %titles = &Apache::lonlocal::texthash (
- aboutme => 'Personal Home Page',
+ aboutme => 'Personal Information Page',
blog => 'Blog',
portfolio => 'Portfolio',
- official => 'Official courses (with institutional codes)', unofficial => 'Unofficial courses',
+ official => 'Official courses (with institutional codes)',
+ unofficial => 'Unofficial courses',
+ community => 'Communities',
);
return %titles;
}
@@ -1828,6 +1595,16 @@ sub print_usercreation {
}
$datatable .= '';
}
+ my ($othertitle,$usertypes,$types) =
+ &Apache::loncommon::sorted_inst_types($dom);
+ if (ref($usertypes) eq 'HASH') {
+ if (keys(%{$usertypes}) > 0) {
+ $datatable .= &insttypes_row($settings->{cancreate},$types,$usertypes,
+ $dom,$numinrow,$othertitle,
+ 'statustocreate');
+ $$rowtotal ++;
+ }
+ }
} else {
my @contexts = ('author','course','domain');
my @authtypes = ('int','krb4','krb5','loc');
@@ -2081,8 +1858,8 @@ sub print_scantronformat {
%confhash);
my $switchserver = &check_switchserver($dom,$confname);
my %lt = &Apache::lonlocal::texthash (
- default => 'Default scantron format file error',
- custom => 'Custom scantron format file error',
+ default => 'Default bubblesheet format file error',
+ custom => 'Custom bubblesheet format file error',
);
my %scantronfiles = (
default => 'default.tab',
@@ -2155,7 +1932,7 @@ sub print_scantronformat {
}
}
} else {
- $error{'default'} = &mt("Unable to copy default scantron formatfile to domain's RES space: [_1]",$switchserver);
+ $error{'default'} = &mt("Unable to copy default bubblesheet formatfile to domain's RES space: [_1]",$switchserver);
}
}
if (ref($settings) eq 'HASH') {
@@ -2718,10 +2495,18 @@ sub modifiable_userdata_row {
return $output;
}
-sub users_cansearch_row {
- my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle) = @_;
+sub insttypes_row {
+ my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle,$context) = @_;
+ my %lt = &Apache::lonlocal::texthash (
+ cansearch => 'Users allowed to search',
+ statustocreate => 'Institutional affiliation(s) able to create own account (login/SSO)',
+ );
+ my $showdom;
+ if ($context eq 'cansearch') {
+ $showdom = ' ('.$dom.')';
+ }
my $output = ''.
- ''.&mt('Users allowed to search').' ('.$dom.')'.
+ ' '.$lt{$context}.$showdom.
' ';
@@ -2933,6 +2722,7 @@ sub color_font_choices {
links => "Link colors",
images => "Images",
font => "Font color",
+ fontmenu => "Font Menu",
pgbg => "Page",
tabbg => "Header",
sidebg => "Border",
@@ -2999,6 +2789,7 @@ sub modify_colors {
@bgs = ('pgbg','tabbg','sidebg');
}
$confhash->{$role}{'font'} = $env{'form.'.$role.'_font'};
+ $confhash->{$role}{'fontmenu'} = $env{'form.'.$role.'_fontmenu'};
foreach my $item (@bgs,@links,@logintext) {
$confhash->{$role}{$item} = $env{'form.'.$role.'_'.$item};
}
@@ -3112,6 +2903,15 @@ sub modify_colors {
$changes{$role}{'font'} = 1;
}
}
+ if ($domconfig->{$role}{'fontmenu'} ne '') {
+ if ($confhash->{$role}{'fontmenu'} ne $domconfig->{$role}{'fontmenu'}) {
+ $changes{$role}{'fontmenu'} = 1;
+ }
+ } else {
+ if ($confhash->{$role}{'fontmenu'}) {
+ $changes{$role}{'fontmenu'} = 1;
+ }
+ }
foreach my $item (@bgs) {
if ($domconfig->{$role}{$item} ne '') {
if ($confhash->{$role}{$item} ne $domconfig->{$role}{$item}) {
@@ -3541,18 +3341,6 @@ sub check_switchserver {
return $switchserver;
}
-sub javascript_set_colnums {
- return < 1100) {
- document.pickactions.numcols[1].checked = true;
- } else {
- document.pickactions.numcols[0].checked = true;
- }
-}
-END
-}
-
sub modify_quotas {
my ($dom,$action,%domconfig) = @_;
my ($context,@usertools);
@@ -3562,7 +3350,7 @@ sub modify_quotas {
$context = $action;
}
if ($context eq 'requestcourses') {
- @usertools = ('official','unofficial');
+ @usertools = ('official','unofficial','community');
} else {
@usertools = ('aboutme','blog','portfolio');
}
@@ -3736,7 +3524,7 @@ sub modify_quotas {
if ($context eq 'requestcourses') {
$resulttext = &mt('No changes made to rights to request creation of courses.');
} else {
- $resulttext = &mt('No changes made to availability of home pages, blogs, portfolios or default quotas');
+ $resulttext = &mt('No changes made to availability of personal information pages, blogs, portfolios or default quotas');
}
}
} else {
@@ -4120,7 +3908,7 @@ sub modify_contacts {
}
my (%others,%to);
my @contacts = ('supportemail','adminemail');
- my @mailings = ('errormail','packagesmail','helpdeskmail');
+ my @mailings = ('errormail','packagesmail','helpdeskmail','lonstatusmail');
foreach my $type (@mailings) {
@{$newsetting{$type}} =
&Apache::loncommon::get_env_multiple('form.'.$type);
@@ -4165,6 +3953,7 @@ sub modify_contacts {
$default{'errormail'} = 'adminemail';
$default{'packagesmail'} = 'adminemail';
$default{'helpdeskmail'} = 'supportemail';
+ $default{'lonstatusmail'} = 'adminemail';
foreach my $item (@contacts) {
if ($to{$item} ne $default{$item}) {
$changes{$item} = 1;
@@ -4247,10 +4036,19 @@ sub modify_usercreation {
$cancreate{$item} = $env{'form.can_createuser_'.$item};
}
}
+ my ($othertitle,$usertypes,$types) =
+ &Apache::loncommon::sorted_inst_types($dom);
+ if (ref($types) eq 'ARRAY') {
+ if (@{$types} > 0) {
+ @{$cancreate{'statustocreate'}} =
+ &Apache::loncommon::get_env_multiple('form.statustocreate');
+ }
+ push(@contexts,'statustocreate');
+ }
if (ref($curr_usercreation{'cancreate'}) eq 'HASH') {
foreach my $item (@contexts) {
- if ($item eq 'selfcreate') {
- if (ref($curr_usercreation{'cancreate'}{$item}) eq 'ARRAY') {
+ if (($item eq 'selfcreate') || ($item eq 'statustocreate')) {
+ if (ref($curr_usercreation{'cancreate'}{$item}) eq 'ARRAY') {
foreach my $curr (@{$curr_usercreation{'cancreate'}{$item}}) {
if (!grep(/^$curr$/,@{$cancreate{$item}})) {
if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
@@ -4437,6 +4235,29 @@ sub modify_usercreation {
}
$chgtext .= '';
}
+ } elsif ($type eq 'statustocreate') {
+ if ((ref($cancreate{'selfcreate'}) eq 'ARRAY') &&
+ (ref($cancreate{'statustocreate'}) eq 'ARRAY')) {
+ if (@{$cancreate{'selfcreate'}} > 0) {
+ if (@{$cancreate{'statustocreate'}} == 0) {
+ if (!grep(/^email$/,@{$cancreate{'selfcreate'}})) {
+ $chgtext .= &mt("However, no institutional affiliations (including 'other') are currently permitted to create accounts.");
+ }
+ } elsif (ref($usertypes) eq 'HASH') {
+ if (grep(/^(login|sso)$/,@{$cancreate{'selfcreate'}})) {
+ $chgtext .= &mt('creation of a new account for an institutional user is restricted to the following institutional affiliation(s):').'';
+ foreach my $case (@{$cancreate{$type}}) {
+ if ($case eq 'default') {
+ $chgtext .= ''.$othertitle.' ';
+ } else {
+ $chgtext .= ''.$usertypes->{$case}.' ';
+ }
+ }
+ $chgtext .= ' ';
+ }
+ }
+ }
+ }
} else {
if ($cancreate{$type} eq 'none') {
$chgtext .= &mt('creation of new users is not permitted, except by a Domain Coordinator.');