--- loncom/interface/domainprefs.pm 2017/10/17 14:07:23 1.160.6.86
+++ loncom/interface/domainprefs.pm 2016/01/26 14:30:24 1.267
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.160.6.86 2017/10/17 14:07:23 raeburn Exp $
+# $Id: domainprefs.pm,v 1.267 2016/01/26 14:30:24 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -19,8 +19,7 @@
#
# You should have received a copy of the GNU General Public License
# along with LON-CAPA; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA#
# /home/httpd/html/adm/gpl.txt
#
# http://www.lon-capa.org/
@@ -174,6 +173,7 @@ use File::Copy;
use Locale::Language;
use DateTime::TimeZone;
use DateTime::Locale;
+use Time::HiRes qw( sleep );
my $registered_cleanup;
my $modified_urls;
@@ -216,13 +216,14 @@ sub handler {
'contacts','defaults','scantron','coursecategories',
'serverstatuses','requestcourses','helpsettings',
'coursedefaults','usersessions','loadbalancing',
- 'requestauthor','selfenrollment','inststatus'],$dom);
+ 'requestauthor','selfenrollment','inststatus',
+ 'ltitools'],$dom);
my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll',
'autoupdate','autocreate','directorysrch','contacts',
'usercreation','selfcreation','usermodification','scantron',
'requestcourses','requestauthor','coursecategories',
'serverstatuses','helpsettings','coursedefaults',
- 'selfenrollment','usersessions');
+ 'ltitools','selfenrollment','usersessions');
my %existing;
if (ref($domconfig{'loadbalancing'}) eq 'HASH') {
%existing = %{$domconfig{'loadbalancing'}};
@@ -262,8 +263,6 @@ sub handler {
help => 'Domain_Configuration_LangTZAuth',
header => [{col1 => 'Setting',
col2 => 'Value'},
- {col1 => 'Internal Authentication',
- col2 => 'Value'},
{col1 => 'Institutional user types',
col2 => 'Assignable to e-mail usernames'}],
print => \&print_defaults,
@@ -307,24 +306,18 @@ sub handler {
modify => \&modify_autocreate,
},
'directorysrch' =>
- { text => 'Directory searches',
+ { text => 'Institutional directory searches',
help => 'Domain_Configuration_InstDirectory_Search',
- header => [{col1 => 'Institutional Directory Setting',
- col2 => 'Value',},
- {col1 => 'LON-CAPA Directory Setting',
+ header => [{col1 => 'Setting',
col2 => 'Value',}],
print => \&print_directorysrch,
modify => \&modify_directorysrch,
},
'contacts' =>
- { text => 'E-mail addresses and helpform',
+ { text => 'Contact Information',
help => 'Domain_Configuration_Contact_Info',
- header => [{col1 => 'Default e-mail addresses',
- col2 => 'Value',},
- {col1 => 'Recipient(s) for notifications',
- col2 => 'Value',},
- {col1 => 'Ask helpdesk form settings',
- col2 => 'Value',},],
+ header => [{col1 => 'Setting',
+ col2 => 'Value',}],
print => \&print_contacts,
modify => \&modify_contacts,
},
@@ -421,12 +414,10 @@ sub handler {
modify => \&modify_serverstatuses,
},
'helpsettings' =>
- {text => 'Support settings',
+ {text => 'Help page settings',
help => 'Domain_Configuration_Help_Settings',
- header => [{col1 => 'Help Page Settings (logged-in users)',
- col2 => 'Value'},
- {col1 => 'Helpdesk Roles',
- col2 => 'Settings'},],
+ header => [{col1 => 'Help Settings (logged-in users)',
+ col2 => 'Value'}],
print => \&print_helpsettings,
modify => \&modify_helpsettings,
},
@@ -452,6 +443,14 @@ sub handler {
print => \&print_selfenrollment,
modify => \&modify_selfenrollment,
},
+ 'privacy' =>
+ {text => 'User Privacy',
+ help => 'Domain_Configuration_User_Privacy',
+ header => [{col1 => 'Setting',
+ col2 => 'Value',}],
+ print => \&print_privacy,
+ modify => \&modify_privacy,
+ },
'usersessions' =>
{text => 'User session hosting/offloading',
help => 'Domain_Configuration_User_Sessions',
@@ -464,7 +463,7 @@ sub handler {
print => \&print_usersessions,
modify => \&modify_usersessions,
},
- 'loadbalancing' =>
+ 'loadbalancing' =>
{text => 'Dedicated Load Balancer(s)',
help => 'Domain_Configuration_Load_Balancing',
header => [{col1 => 'Balancers',
@@ -475,6 +474,15 @@ sub handler {
print => \&print_loadbalancing,
modify => \&modify_loadbalancing,
},
+ 'ltitools' =>
+ {text => 'External Tools (LTI)',
+ help => 'Domain_configuration_LTI_Tools',
+ header => [{col1 => 'Setting',
+ col2 => 'Value',}],
+ print => \&print_ltitools,
+ modify => \&modify_ltitools,
+ },
+
);
if (keys(%servers) > 1) {
$prefs{'login'} = { text => 'Log-in page options',
@@ -528,9 +536,6 @@ $javascript_validations
$coursebrowserjs
END
}
- if (grep(/^contacts$/,@actions)) {
- $js .= &contacts_javascript();
- }
&Apache::lonconfigsettings::display_settings($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,$js);
} else {
# check if domconfig user exists for the domain.
@@ -620,7 +625,7 @@ sub process_changes {
} elsif ($action eq 'autocreate') {
$output = &modify_autocreate($dom,%domconfig);
} elsif ($action eq 'directorysrch') {
- $output = &modify_directorysrch($dom,$lastactref,%domconfig);
+ $output = &modify_directorysrch($dom,%domconfig);
} elsif ($action eq 'usercreation') {
$output = &modify_usercreation($dom,%domconfig);
} elsif ($action eq 'selfcreation') {
@@ -642,7 +647,7 @@ sub process_changes {
} elsif ($action eq 'requestauthor') {
$output = &modify_quotas($r,$dom,$action,$lastactref,%domconfig);
} elsif ($action eq 'helpsettings') {
- $output = &modify_helpsettings($r,$dom,$confname,$lastactref,%domconfig);
+ $output = &modify_helpsettings($r,$dom,$confname,%domconfig);
} elsif ($action eq 'coursedefaults') {
$output = &modify_coursedefaults($dom,$lastactref,%domconfig);
} elsif ($action eq 'selfenrollment') {
@@ -651,6 +656,8 @@ sub process_changes {
$output = &modify_usersessions($dom,$lastactref,%domconfig);
} elsif ($action eq 'loadbalancing') {
$output = &modify_loadbalancing($dom,%domconfig);
+ } elsif ($action eq 'ltitools') {
+ $output = &modify_ltitools($r,$dom,$action,$lastactref,%domconfig);
}
return $output;
}
@@ -663,22 +670,6 @@ sub print_config_box {
$output = &coursecategories_javascript($settings);
} elsif ($action eq 'defaults') {
$output = &defaults_javascript($settings);
- } elsif ($action eq 'helpsettings') {
- my (%privs,%levelscurrent);
- my %full=();
- my %levels=(
- course => {},
- domain => {},
- system => {},
- );
- my $context = 'domain';
- my $crstype = 'Course';
- my $formname = 'display';
- &Apache::lonuserutils::custom_role_privs(\%privs,\%full,\%levels,\%levelscurrent);
- my @templateroles = &Apache::lonuserutils::custom_template_roles($context,$crstype);
- $output =
- &Apache::lonuserutils::custom_roledefs_js($context,$crstype,$formname,\%full,
- \@templateroles);
}
$output .=
'
@@ -696,7 +687,6 @@ sub print_config_box {
my $colspan = '';
my $rightcolspan = '';
if (($action eq 'rolecolors') || ($action eq 'defaults') ||
- ($action eq 'directorysrch') ||
(($action eq 'login') && ($numheaders < 4))) {
$colspan = ' colspan="2"';
}
@@ -714,8 +704,7 @@ sub print_config_box {
$rowtotal ++;
if (($action eq 'autoupdate') || ($action eq 'usercreation') || ($action eq 'selfcreation') ||
($action eq 'usermodification') || ($action eq 'defaults') || ($action eq 'coursedefaults') ||
- ($action eq 'selfenrollment') || ($action eq 'usersessions') || ($action eq 'directorysrch') ||
- ($action eq 'helpsettings') || ($action eq 'contacts')) {
+ ($action eq 'selfenrollment') || ($action eq 'usersessions')) {
$output .= $item->{'print'}->('top',$dom,$settings,\$rowtotal);
} elsif ($action eq 'coursecategories') {
$output .= $item->{'print'}->('top',$dom,$item,$settings,\$rowtotal);
@@ -745,8 +734,7 @@ sub print_config_box {
$rowtotal ++;
if (($action eq 'autoupdate') || ($action eq 'usercreation') ||
($action eq 'selfcreation') || ($action eq 'selfenrollment') ||
- ($action eq 'usersessions') || ($action eq 'coursecategories') ||
- ($action eq 'contacts') || ($action eq 'defaults')) {
+ ($action eq 'usersessions') || ($action eq 'coursecategories')) {
if ($action eq 'coursecategories') {
$output .= &print_coursecategories('middle',$dom,$item,$settings,\$rowtotal);
$colspan = ' colspan="2"';
@@ -771,8 +759,7 @@ sub print_config_box {
}
$rowtotal ++;
} elsif (($action eq 'usermodification') || ($action eq 'coursedefaults') ||
- ($action eq 'defaults') || ($action eq 'directorysrch') ||
- ($action eq 'helpsettings')) {
+ ($action eq 'defaults')) {
$output .= $item->{'print'}->('bottom',$dom,$settings,\$rowtotal);
} elsif ($action eq 'login') {
if ($numheaders == 4) {
@@ -885,7 +872,7 @@ sub print_config_box {
';
- if ($action eq 'login') {
+ if (($action eq 'login') || ($action eq 'directorysrch')) {
$output .= '
'.&mt($item->{'header'}->[0]->{'col1'}).' ';
} elsif ($action eq 'serverstatuses') {
@@ -929,11 +916,14 @@ sub print_config_box {
$rowtotal ++;
if ($action eq 'quotas') {
$output .= &print_quotas($dom,$settings,\$rowtotal,$action);
- } elsif (($action eq 'autoenroll') || ($action eq 'autocreate') ||
- ($action eq 'serverstatuses') || ($action eq 'loadbalancing')) {
+ } elsif (($action eq 'autoenroll') || ($action eq 'autocreate') || ($action eq 'directorysrch') ||
+ ($action eq 'contacts') || ($action eq 'serverstatuses') || ($action eq 'loadbalancing') ||
+ ($action eq 'ltitools')) {
$output .= $item->{'print'}->($dom,$settings,\$rowtotal);
} elsif ($action eq 'scantron') {
$output .= &print_scantronformat($r,$dom,$confname,$settings,\$rowtotal);
+ } elsif ($action eq 'helpsettings') {
+ $output .= &print_helpsettings($dom,$confname,$settings,\$rowtotal);
}
}
$output .= '
@@ -2282,8 +2272,7 @@ sub print_textbookcourses {
(' 'x2).
''.&mt('Thumbnail:');
if ($image) {
- $datatable .= ''.
- $imgsrc.
+ $datatable .= $imgsrc.
' '.&mt('Delete?').' '.
' '.&mt('Replace:').' ';
@@ -2437,10 +2426,78 @@ $jstext{'templates'};
ENDSCRIPT
}
+sub ltitools_javascript {
+ my ($settings) = @_;
+ return unless(ref($settings) eq 'HASH');
+ my (%ordered,$total,%jstext);
+ $total = 0;
+ foreach my $item (keys(%{$settings})) {
+ if (ref($settings->{$item}) eq 'HASH') {
+ my $num = $settings->{$item}{'order'};
+ $ordered{$num} = $item;
+ }
+ }
+ $total = scalar(keys(%{$settings}));
+ my @jsarray = ();
+ foreach my $item (sort {$a <=> $b } (keys(%ordered))) {
+ push(@jsarray,$ordered{$item});
+ }
+ my $jstext = ' var ltitools = Array('."'".join("','",@jsarray)."'".');'."\n";
+ return <<"ENDSCRIPT";
+
+
+ENDSCRIPT
+}
+
sub print_autoenroll {
my ($dom,$settings,$rowtotal) = @_;
my $autorun = &Apache::lonnet::auto_run(undef,$dom),
- my ($defdom,$runon,$runoff,$coownerson,$coownersoff,$failsafe);
+ my ($defdom,$runon,$runoff,$coownerson,$coownersoff);
if (ref($settings) eq 'HASH') {
if (exists($settings->{'run'})) {
if ($settings->{'run'} eq '0') {
@@ -2474,9 +2531,6 @@ sub print_autoenroll {
if (exists($settings->{'sender_domain'})) {
$defdom = $settings->{'sender_domain'};
}
- if (exists($settings->{'autofailsafe'})) {
- $failsafe = $settings->{'autofailsafe'};
- }
} else {
if ($autorun) {
$runon = ' checked="checked" ';
@@ -2512,12 +2566,8 @@ sub print_autoenroll {
$coownerson.' value="1" />'.&mt('Yes').' '.
' '.&mt('No').' '.
- ' '.
- ''.&mt('Failsafe for no drops when institutional data missing').' '.
- ''.
- ' ';
- $$rowtotal += 4;
+ '';
+ $$rowtotal += 3;
return $datatable;
}
@@ -2646,783 +2696,231 @@ sub print_autocreate {
}
sub print_directorysrch {
- my ($position,$dom,$settings,$rowtotal) = @_;
- my $datatable;
- if ($position eq 'top') {
- my $instsrchon = ' ';
- my $instsrchoff = ' checked="checked" ';
- my ($exacton,$containson,$beginson);
- my $instlocalon = ' ';
- my $instlocaloff = ' checked="checked" ';
- if (ref($settings) eq 'HASH') {
- if ($settings->{'available'} eq '1') {
- $instsrchon = $instsrchoff;
- $instsrchoff = ' ';
- }
- if ($settings->{'localonly'} eq '1') {
- $instlocalon = $instlocaloff;
- $instlocaloff = ' ';
- }
- if (ref($settings->{'searchtypes'}) eq 'ARRAY') {
- foreach my $type (@{$settings->{'searchtypes'}}) {
- if ($type eq 'exact') {
- $exacton = ' checked="checked" ';
- } elsif ($type eq 'contains') {
- $containson = ' checked="checked" ';
- } elsif ($type eq 'begins') {
- $beginson = ' checked="checked" ';
- }
- }
- } else {
- if ($settings->{'searchtypes'} eq 'exact') {
- $exacton = ' checked="checked" ';
- } elsif ($settings->{'searchtypes'} eq 'contains') {
- $containson = ' checked="checked" ';
- } elsif ($settings->{'searchtypes'} eq 'specify') {
+ my ($dom,$settings,$rowtotal) = @_;
+ my $srchon = ' ';
+ my $srchoff = ' checked="checked" ';
+ my ($exacton,$containson,$beginson);
+ my $localon = ' ';
+ my $localoff = ' checked="checked" ';
+ if (ref($settings) eq 'HASH') {
+ if ($settings->{'available'} eq '1') {
+ $srchon = $srchoff;
+ $srchoff = ' ';
+ }
+ if ($settings->{'localonly'} eq '1') {
+ $localon = $localoff;
+ $localoff = ' ';
+ }
+ if (ref($settings->{'searchtypes'}) eq 'ARRAY') {
+ foreach my $type (@{$settings->{'searchtypes'}}) {
+ if ($type eq 'exact') {
$exacton = ' checked="checked" ';
+ } elsif ($type eq 'contains') {
$containson = ' checked="checked" ';
+ } elsif ($type eq 'begins') {
+ $beginson = ' checked="checked" ';
}
}
- }
- my ($searchtitles,$titleorder) = &sorted_searchtitles();
- my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
-
- my $numinrow = 4;
- my $cansrchrow = 0;
- $datatable=''.
- ''.&mt('Institutional directory search available?').' '.
- ''.
- ' '.&mt('Yes').' '.
- ' '.&mt('No').' '.
- ' '.
- ''.&mt('Other domains can search institution?').' '.
- ''.
- ' '.&mt('Yes').' '.
- ' '.&mt('No').' '.
- ' ';
- $$rowtotal += 2;
- if (ref($usertypes) eq 'HASH') {
- if (keys(%{$usertypes}) > 0) {
- $datatable .= &insttypes_row($settings,$types,$usertypes,$dom,
- $numinrow,$othertitle,'cansearch');
- $cansrchrow = 1;
+ } else {
+ if ($settings->{'searchtypes'} eq 'exact') {
+ $exacton = ' checked="checked" ';
+ } elsif ($settings->{'searchtypes'} eq 'contains') {
+ $containson = ' checked="checked" ';
+ } elsif ($settings->{'searchtypes'} eq 'specify') {
+ $exacton = ' checked="checked" ';
+ $containson = ' checked="checked" ';
}
}
- if ($cansrchrow) {
- $$rowtotal ++;
- $datatable .= '';
- } else {
- $datatable .= ' ';
+ }
+ my ($searchtitles,$titleorder) = &sorted_searchtitles();
+ my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
+
+ my $numinrow = 4;
+ my $cansrchrow = 0;
+ my $datatable=' '.
+ ''.&mt('Directory search available?').' '.
+ ''.
+ ' '.&mt('Yes').' '.
+ ' '.&mt('No').' '.
+ ' '.
+ ''.&mt('Other domains can search?').' '.
+ ''.
+ ' '.&mt('Yes').' '.
+ ' '.&mt('No').' '.
+ ' ';
+ $$rowtotal += 2;
+ if (ref($usertypes) eq 'HASH') {
+ if (keys(%{$usertypes}) > 0) {
+ $datatable .= &insttypes_row($settings,$types,$usertypes,$dom,
+ $numinrow,$othertitle,'cansearch');
+ $cansrchrow = 1;
}
- $datatable .= ''.&mt('Supported search methods').
- ' ';
+ $$rowtotal ++;
+ if ($cansrchrow) {
+ $datatable .= '';
} else {
- my $domsrchon = ' checked="checked" ';
- my $domsrchoff = ' ';
- my $domlocalon = ' ';
- my $domlocaloff = ' checked="checked" ';
- if (ref($settings) eq 'HASH') {
- if ($settings->{'lclocalonly'} eq '1') {
- $domlocalon = $domlocaloff;
- $domlocaloff = ' ';
- }
- if ($settings->{'lcavailable'} eq '0') {
- $domsrchoff = $domsrchon;
- $domsrchon = ' ';
- }
- }
- $datatable=' '.
- ''.&mt('LON-CAPA directory search available?').' '.
- ''.
- ' '.&mt('Yes').' '.
- ' '.&mt('No').' '.
- ' '.
- ''.&mt('Other domains can search LON-CAPA domain?').' '.
- ''.
- ' '.&mt('Yes').' '.
- ' '.&mt('No').' '.
- ' ';
- $$rowtotal += 2;
+ $datatable .= '';
}
+ $datatable .= ''.&mt('Search latitude').' '.
+ ''.
+ ''.
+ ' '.&mt('Exact match').
+ ' '.
+ ' '.&mt('Begins with').
+ ' '.
+ ' '.&mt('Contains').
+ ' ';
+ $$rowtotal ++;
return $datatable;
}
sub print_contacts {
- my ($position,$dom,$settings,$rowtotal) = @_;
+ my ($dom,$settings,$rowtotal) = @_;
my $datatable;
my @contacts = ('adminemail','supportemail');
- my (%checked,%to,%otheremails,%bccemails,%includestr,%includeloc,%currfield,
- $maxsize,$fields,$fieldtitles,$fieldoptions,$possoptions,@mailings);
- if ($position eq 'top') {
- if (ref($settings) eq 'HASH') {
- foreach my $item (@contacts) {
- if (exists($settings->{$item})) {
- $to{$item} = $settings->{$item};
- }
- }
- }
- } elsif ($position eq 'middle') {
- @mailings = ('errormail','packagesmail','lonstatusmail','requestsmail',
- 'updatesmail','idconflictsmail');
- foreach my $type (@mailings) {
- $otheremails{$type} = '';
- }
- } else {
- @mailings = ('helpdeskmail','otherdomsmail');
- foreach my $type (@mailings) {
- $otheremails{$type} = '';
- }
- $bccemails{'helpdeskmail'} = '';
- $bccemails{'otherdomsmail'} = '';
- $includestr{'helpdeskmail'} = '';
- $includestr{'otherdomsmail'} = '';
- ($fields,$fieldtitles,$fieldoptions,$possoptions) = &helpform_fields();
+ my (%checked,%to,%otheremails,%bccemails);
+ my @mailings = ('errormail','packagesmail','lonstatusmail','helpdeskmail',
+ 'requestsmail','updatesmail','idconflictsmail');
+ foreach my $type (@mailings) {
+ $otheremails{$type} = '';
}
+ $bccemails{'helpdeskmail'} = '';
if (ref($settings) eq 'HASH') {
- unless ($position eq 'top') {
- foreach my $type (@mailings) {
- if (exists($settings->{$type})) {
- if (ref($settings->{$type}) eq 'HASH') {
- foreach my $item (@contacts) {
- if ($settings->{$type}{$item}) {
- $checked{$type}{$item} = ' checked="checked" ';
- }
- }
- $otheremails{$type} = $settings->{$type}{'others'};
- if (($type eq 'helpdeskmail') || ($type eq 'otherdomsmail')) {
- $bccemails{$type} = $settings->{$type}{'bcc'};
- if ($settings->{$type}{'include'} ne '') {
- ($includeloc{$type},$includestr{$type}) = split(/:/,$settings->{$type}{'include'},2);
- $includestr{$type} = &unescape($includestr{$type});
- }
- }
- }
- } elsif ($type eq 'lonstatusmail') {
- $checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" ';
- }
+ foreach my $item (@contacts) {
+ if (exists($settings->{$item})) {
+ $to{$item} = $settings->{$item};
}
}
- if ($position eq 'bottom') {
- foreach my $type (@mailings) {
- $bccemails{$type} = $settings->{$type}{'bcc'};
- if ($settings->{$type}{'include'} ne '') {
- ($includeloc{$type},$includestr{$type}) = split(/:/,$settings->{$type}{'include'},2);
- $includestr{$type} = &unescape($includestr{$type});
- }
- }
- if (ref($settings->{'helpform'}) eq 'HASH') {
- if (ref($fields) eq 'ARRAY') {
- foreach my $field (@{$fields}) {
- $currfield{$field} = $settings->{'helpform'}{$field};
+ foreach my $type (@mailings) {
+ if (exists($settings->{$type})) {
+ if (ref($settings->{$type}) eq 'HASH') {
+ foreach my $item (@contacts) {
+ if ($settings->{$type}{$item}) {
+ $checked{$type}{$item} = ' checked="checked" ';
+ }
}
- }
- if (exists($settings->{'helpform'}{'maxsize'})) {
- $maxsize = $settings->{'helpform'}{'maxsize'};
- } else {
- $maxsize = '1.0';
- }
- } else {
- if (ref($fields) eq 'ARRAY') {
- foreach my $field (@{$fields}) {
- $currfield{$field} = 'yes';
+ $otheremails{$type} = $settings->{$type}{'others'};
+ if ($type eq 'helpdeskmail') {
+ $bccemails{$type} = $settings->{$type}{'bcc'};
}
}
- $maxsize = '1.0';
+ } elsif ($type eq 'lonstatusmail') {
+ $checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" ';
}
}
} else {
- if ($position eq 'top') {
- $to{'supportemail'} = $Apache::lonnet::perlvar{'lonSupportEMail'};
- $to{'adminemail'} = $Apache::lonnet::perlvar{'lonAdmEMail'};
- $checked{'errormail'}{'adminemail'} = ' checked="checked" ';
- $checked{'packagesmail'}{'adminemail'} = ' checked="checked" ';
- $checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" ';
- $checked{'requestsmail'}{'adminemail'} = ' checked="checked" ';
- $checked{'updatesmail'}{'adminemail'} = ' checked="checked" ';
- $checked{'idconflictsmail'}{'adminemail'} = ' checked="checked" ';
- } elsif ($position eq 'bottom') {
- $checked{'helpdeskmail'}{'supportemail'} = ' checked="checked" ';
- $checked{'otherdomsmail'}{'supportemail'} = ' checked="checked" ';
- if (ref($fields) eq 'ARRAY') {
- foreach my $field (@{$fields}) {
- $currfield{$field} = 'yes';
- }
- }
- $maxsize = '1.0';
- }
+ $to{'supportemail'} = $Apache::lonnet::perlvar{'lonSupportEMail'};
+ $to{'adminemail'} = $Apache::lonnet::perlvar{'lonAdmEMail'};
+ $checked{'errormail'}{'adminemail'} = ' checked="checked" ';
+ $checked{'packagesmail'}{'adminemail'} = ' checked="checked" ';
+ $checked{'helpdeskmail'}{'supportemail'} = ' checked="checked" ';
+ $checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" ';
+ $checked{'requestsmail'}{'adminemail'} = ' checked="checked" ';
+ $checked{'updatesmail'}{'adminemail'} = ' checked="checked" ';
+ $checked{'idconflictsmail'}{'adminemail'} = ' checked="checked" ';
}
my ($titles,$short_titles) = &contact_titles();
my $rownum = 0;
my $css_class;
- if ($position eq 'top') {
- foreach my $item (@contacts) {
- $css_class = $rownum%2?' class="LC_odd_row"':'';
- $datatable .= ''.
- ''.$titles->{$item}.
- ' '.
- ' ';
- $rownum ++;
- }
- } else {
- foreach my $type (@mailings) {
- $css_class = $rownum%2?' class="LC_odd_row"':'';
- $datatable .= ''.
- ''.
- $titles->{$type}.': '.
- '';
- if (($type eq 'helpdeskmail') || ($type eq 'otherdomsmail')) {
- $datatable .= ''.&mt('E-mail recipient(s)').' ';
- }
- $datatable .= '';
- foreach my $item (@contacts) {
- $datatable .= ''.
- ' '.$short_titles->{$item}.
- ' ';
- }
- $datatable .= ' '.&mt('Others').': '.
- ' ';
- my %locchecked;
- if (($type eq 'helpdeskmail') || ($type eq 'otherdomsmail')) {
- foreach my $loc ('s','b') {
- if ($includeloc{$type} eq $loc) {
- $locchecked{$loc} = ' checked="checked"';
- last;
- }
- }
- $datatable .= ' '.&mt('Bcc:').(' 'x6).
- ' '.
- ''.&mt('Optional added text').' '.
- &mt('Text automatically added to e-mail:').' '.
- ' '.
- ''.&mt('Location:').' '.
- ' '.&mt('in subject').' '.
- (' 'x2).
- ' '.&mt('in body').' '.
- ' ';
- }
- $datatable .= ' '."\n";
- $rownum ++;
- }
+ foreach my $item (@contacts) {
+ $css_class = $rownum%2?' class="LC_odd_row"':'';
+ $datatable .= ''.
+ ''.$titles->{$item}.
+ ' '.
+ ' ';
+ $rownum ++;
}
- if ($position eq 'middle') {
- my %choices;
- $choices{'reporterrors'} = &mt('E-mail error reports to [_1]',
- &Apache::loncommon::modal_link('http://loncapa.org/core.html',
- &mt('LON-CAPA core group - MSU'),600,500));
- $choices{'reportupdates'} = &mt('E-mail record of completed LON-CAPA updates to [_1]',
- &Apache::loncommon::modal_link('http://loncapa.org/core.html',
- &mt('LON-CAPA core group - MSU'),600,500));
- my @toggles = ('reporterrors','reportupdates');
- my %defaultchecked = ('reporterrors' => 'on',
- 'reportupdates' => 'on');
- (my $reports,$rownum) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked,
- \%choices,$rownum);
- $datatable .= $reports;
- } elsif ($position eq 'bottom') {
+ foreach my $type (@mailings) {
$css_class = $rownum%2?' class="LC_odd_row"':'';
$datatable .= ''.
- ''.&mt('Extra helpdesk form fields:').' '.
- &mt('(e-mail, subject, and description always shown)').
- ' ';
- if ((ref($fields) eq 'ARRAY') && (ref($fieldtitles) eq 'HASH') &&
- (ref($fieldoptions) eq 'HASH') && (ref($possoptions) eq 'HASH')) {
- $datatable .= '';
+ ' '.
+ $titles->{$type}.': '.
+ ''.
+ '';
+ foreach my $item (@contacts) {
+ $datatable .= ''.
+ ' '.$short_titles->{$item}.
+ ' ';
+ }
+ $datatable .= ' '.&mt('Others').': '.
+ ' ';
+ if ($type eq 'helpdeskmail') {
+ $datatable .= ' '.&mt('Bcc:').(' 'x6).
+ ' ';
}
$datatable .= ' '."\n";
$rownum ++;
}
+ my %choices;
+ $choices{'reporterrors'} = &mt('E-mail error reports to [_1]',
+ &Apache::loncommon::modal_link('http://loncapa.org/core.html',
+ &mt('LON-CAPA core group - MSU'),600,500));
+ $choices{'reportupdates'} = &mt('E-mail record of completed LON-CAPA updates to [_1]',
+ &Apache::loncommon::modal_link('http://loncapa.org/core.html',
+ &mt('LON-CAPA core group - MSU'),600,500));
+ my @toggles = ('reporterrors','reportupdates');
+ my %defaultchecked = ('reporterrors' => 'on',
+ 'reportupdates' => 'on');
+ (my $reports,$rownum) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked,
+ \%choices,$rownum);
+ $datatable .= $reports;
$$rowtotal += $rownum;
return $datatable;
}
-sub contacts_javascript {
- return <<"ENDSCRIPT";
-
-
-
-ENDSCRIPT
-}
-
sub print_helpsettings {
- my ($position,$dom,$settings,$rowtotal) = @_;
- my $confname = $dom.'-domainconfig';
- my $formname = 'display';
+ my ($dom,$confname,$settings,$rowtotal) = @_;
my ($datatable,$itemcount);
- if ($position eq 'top') {
- $itemcount = 1;
- my (%choices,%defaultchecked,@toggles);
- $choices{'submitbugs'} = &mt('Display link to: [_1]?',
- &Apache::loncommon::modal_link('http://bugs.loncapa.org',
- &mt('LON-CAPA bug tracker'),600,500));
- %defaultchecked = ('submitbugs' => 'on');
- @toggles = ('submitbugs');
- ($datatable,$itemcount) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked,
- \%choices,$itemcount);
- $$rowtotal ++;
- } else {
- my $css_class;
- my %existing=&Apache::lonnet::dump('roles',$dom,$confname,'rolesdef_');
- my (%customroles,%ordered,%current);
- if (ref($settings) eq 'HASH') {
- if (ref($settings->{'adhoc'}) eq 'HASH') {
- %current = %{$settings->{'adhoc'}};
- }
- }
- my $count = 0;
- foreach my $key (sort(keys(%existing))) {
- if ($key=~/^rolesdef\_(\w+)$/) {
- my $rolename = $1;
- my (%privs,$order);
- ($privs{'system'},$privs{'domain'},$privs{'course'}) = split(/\_/,$existing{$key});
- $customroles{$rolename} = \%privs;
- if (ref($current{$rolename}) eq 'HASH') {
- $order = $current{$rolename}{'order'};
- }
- if ($order eq '') {
- $order = $count;
- }
- $ordered{$order} = $rolename;
- $count++;
- }
- }
- my $maxnum = scalar(keys(%ordered));
- my @roles_by_num = ();
- foreach my $item (sort {$a <=> $b } (keys(%ordered))) {
- push(@roles_by_num,$item);
- }
- my $context = 'domprefs';
- my $crstype = 'Course';
- my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
- my @accesstypes = ('all','dh','da','none');
- my ($numstatustypes,@jsarray);
- if (ref($types) eq 'ARRAY') {
- if (@{$types} > 0) {
- $numstatustypes = scalar(@{$types});
- push(@accesstypes,'status');
- @jsarray = ('bystatus');
- }
- }
- my %domhelpdesk = &Apache::lonnet::get_active_domroles($dom,['dh','da']);
- if (keys(%domhelpdesk)) {
- push(@accesstypes,('inc','exc'));
- push(@jsarray,('notinc','notexc'));
- }
- my $hiddenstr = join("','",@jsarray);
- $datatable .= &helpsettings_javascript(\@roles_by_num,$maxnum,$hiddenstr,$formname);
- my $context = 'domprefs';
- my $crstype = 'Course';
- my $prefix = 'helproles_';
- my $add_class = 'LC_hidden';
- foreach my $num (@roles_by_num) {
- my $role = $ordered{$num};
- my ($desc,$access,@statuses);
- if (ref($current{$role}) eq 'HASH') {
- $desc = $current{$role}{'desc'};
- $access = $current{$role}{'access'};
- if (ref($current{$role}{'insttypes'}) eq 'ARRAY') {
- @statuses = @{$current{$role}{'insttypes'}};
- }
- }
- if ($desc eq '') {
- $desc = $role;
- }
- my $identifier = 'custhelp'.$num;
- my %full=();
- my %levels= (
- course => {},
- domain => {},
- system => {},
- );
- my %levelscurrent=(
- course => {},
- domain => {},
- system => {},
- );
- &Apache::lonuserutils::custom_role_privs($customroles{$role},\%full,\%levels,\%levelscurrent);
- my @templateroles = &Apache::lonuserutils::custom_template_roles($context,$crstype);
- $css_class = $itemcount%2?' class="LC_odd_row"':'';
- my $chgstr = ' onchange="javascript:reorderHelpRoles(this.form,'."'helproles_".$num."_pos'".');"';
- $datatable .= ''.$role.' '.
- '';
- for (my $k=0; $k<=$maxnum; $k++) {
- my $vpos = $k+1;
- my $selstr;
- if ($k == $num) {
- $selstr = ' selected="selected" ';
- }
- $datatable .= ''.$vpos.' ';
- }
- $datatable .= ' '.(' 'x2).
- ' '.
- ' '.
- ''.&mt('Role name').' '.
- &mt('Name shown to users:').
- ' '.
- ' '.
- &helpdeskroles_access($dom,$prefix,$num,$add_class,$current{$role},\@accesstypes,
- $othertitle,$usertypes,$types,\%domhelpdesk).
- ''.
- ''.&mt('Role privileges').&adhocbutton($prefix,$num,'privs','show').' '.
- &Apache::lonuserutils::custom_role_table($crstype,\%full,\%levels,
- \%levelscurrent,$identifier,
- 'LC_hidden',$prefix.$num.'_privs').
- ' ';
- $itemcount ++;
- }
- $css_class = $itemcount%2?' class="LC_odd_row"':'';
- my $newcust = 'custhelp'.$count;
- my (%privs,%levelscurrent);
- my %full=();
- my %levels= (
- course => {},
- domain => {},
- system => {},
- );
- &Apache::lonuserutils::custom_role_privs(\%privs,\%full,\%levels,\%levelscurrent);
- my @templateroles = &Apache::lonuserutils::custom_template_roles($context,$crstype);
- my $chgstr = ' onchange="javascript:reorderHelpRoles(this.form,'."'helproles_".$count."_pos'".');"';
- $datatable .= ''.
- ' '."\n".
- '';
- for (my $k=0; $k<$maxnum+1; $k++) {
- my $vpos = $k+1;
- my $selstr;
- if ($k == $maxnum) {
- $selstr = ' selected="selected" ';
- }
- $datatable .= ''.$vpos.' ';
- }
- $datatable .= ' '."\n".
- ' '. &mt('Add').
- ' '.
- ''.&mt('Role name').' '.
- ''.
- &mt('Internal name:').
- ' '.
- ' '.(' 'x4).
- ''.
- &mt('Name shown to users:').
- ' '.
- ' '.
- &helpdeskroles_access($dom,$prefix,$count,'',undef,\@accesstypes,$othertitle,
- $usertypes,$types,\%domhelpdesk).
- ''.&mt('Role privileges').' '.
- &Apache::lonuserutils::custom_role_header($context,$crstype,
- \@templateroles,$newcust).
- &Apache::lonuserutils::custom_role_table('Course',\%full,\%levels,
- \%levelscurrent,$newcust).
- ' ';
- $count ++;
- $$rowtotal += $count;
- }
- return $datatable;
-}
-
-sub adhocbutton {
- my ($prefix,$num,$field,$visibility) = @_;
- my %lt = &Apache::lonlocal::texthash(
- show => 'Show details',
- hide => 'Hide details',
- );
- return ''.(' 'x10).
- ' '.(' 'x2).' '.(' 'x2);
-}
-
-sub helpsettings_javascript {
- my ($roles_by_num,$total,$hiddenstr,$formname) = @_;
- return unless(ref($roles_by_num) eq 'ARRAY');
- my %html_js_lt = &Apache::lonlocal::texthash(
- show => 'Show details',
- hide => 'Hide details',
- );
- &html_escape(\%html_js_lt);
- my $jstext = ' var helproles = Array('."'".join("','",@{$roles_by_num})."'".');'."\n";
- return <<"ENDSCRIPT";
-
-
-ENDSCRIPT
-}
-
-sub helpdeskroles_access {
- my ($dom,$prefix,$num,$add_class,$current,$accesstypes,$othertitle,
- $usertypes,$types,$domhelpdesk) = @_;
- return unless ((ref($accesstypes) eq 'ARRAY') && (ref($domhelpdesk) eq 'HASH'));
- my %lt = &Apache::lonlocal::texthash(
- 'rou' => 'Role usage',
- 'whi' => 'Which helpdesk personnel may use this role?',
- 'all' => 'All with domain helpdesk or helpdesk assistant role',
- 'dh' => 'All with domain helpdesk role',
- 'da' => 'All with domain helpdesk assistant role',
- 'none' => 'None',
- 'status' => 'Determined based on institutional status',
- 'inc' => 'Include all, but exclude specific personnel',
- 'exc' => 'Exclude all, but include specific personnel',
- );
- my %usecheck = (
- all => ' checked="checked"',
- );
- my %displaydiv = (
- status => 'none',
- inc => 'none',
- exc => 'none',
- priv => 'block',
- );
- my $output;
- if (ref($current) eq 'HASH') {
- if (($current->{'access'} ne '') && ($current->{'access'} ne 'all')) {
- if (grep(/^\Q$current->{access}\E$/,@{$accesstypes})) {
- $usecheck{$current->{access}} = $usecheck{'all'};
- delete($usecheck{'all'});
- if ($current->{access} =~ /^(status|inc|exc)$/) {
- my $access = $1;
- $displaydiv{$access} = 'inline';
- } elsif ($current->{access} eq 'none') {
- $displaydiv{'priv'} = 'none';
- }
- }
- }
- }
- $output = ''.$lt{'rou'}.' '.
- ''.$lt{'whi'}.'
';
- foreach my $access (@{$accesstypes}) {
- $output .= ' '.
- $lt{$access}.' ';
- if ($access eq 'status') {
- $output .= '
'.
- &Apache::lonuserutils::adhoc_status_types($dom,$prefix,$num,$current->{$access},
- $othertitle,$usertypes,$types).
- '
';
- } elsif (($access eq 'inc') && (keys(%{$domhelpdesk}) > 0)) {
- $output .= ''.
- &Apache::lonuserutils::adhoc_staff($access,$prefix,$num,$current->{$access},$domhelpdesk).
- '
';
- } elsif (($access eq 'exc') && (keys(%{$domhelpdesk}) > 0)) {
- $output .= ''.
- &Apache::lonuserutils::adhoc_staff($access,$prefix,$num,$current->{$access},$domhelpdesk).
- '
';
- }
- $output .= '';
- }
- $output .= ' ';
- return $output;
+ ($datatable,$itemcount) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked,
+ \%choices,$itemcount);
+ return $datatable;
}
sub radiobutton_prefs {
@@ -3467,7 +2965,7 @@ sub radiobutton_prefs {
} else {
$datatable .= '';
}
- $datatable .=
+ $datatable .=
''.
' '.&mt('Yes').
@@ -3481,33 +2979,352 @@ sub radiobutton_prefs {
return ($datatable,$itemcount);
}
+sub print_ltitools {
+ my ($dom,$settings,$rowtotal) = @_;
+ my $rownum = 0;
+ my $css_class;
+ my $itemcount = 1;
+ my $maxnum = 0;
+ my %ordered;
+ if (ref($settings) eq 'HASH') {
+ foreach my $item (keys(%{$settings})) {
+ if (ref($settings->{$item}) eq 'HASH') {
+ my $num = $settings->{$item}{'order'};
+ $ordered{$num} = $item;
+ }
+ }
+ }
+ my $confname = $dom.'-domainconfig';
+ my $switchserver = &check_switchserver($dom,$confname);
+ my $maxnum = scalar(keys(%ordered));
+ my $datatable = <itools_javascript($settings);
+ my %lt = <itools_names();
+ my @courseroles = ('cc','in','ta','ep','st');
+ my @ltiroles = qw(Instructor ContentDeveloper TeachingAssistant Learner);
+ my @fields = ('fullname','firstname','lastname','email','user','roles');
+ if (keys(%ordered)) {
+ my @items = sort { $a <=> $b } keys(%ordered);
+ for (my $i=0; $i<@items; $i++) {
+ $css_class = $itemcount%2?' class="LC_odd_row"':'';
+ my $item = $ordered{$items[$i]};
+ my ($title,$key,$secret,$url,$imgsrc,$version);
+ if (ref($settings->{$item}) eq 'HASH') {
+ $title = $settings->{$item}->{'title'};
+ $url = $settings->{$item}->{'url'};
+ $key = $settings->{$item}->{'key'};
+ $secret = $settings->{$item}->{'secret'};
+ my $image = $settings->{$item}->{'image'};
+ if ($image ne '') {
+ $imgsrc = ' ';
+ }
+ }
+ my $chgstr = ' onchange="javascript:reorderLTI(this.form,'."'ltitools_".$item."'".');"';
+ $datatable .= ''
+ .'';
+ for (my $k=0; $k<=$maxnum; $k++) {
+ my $vpos = $k+1;
+ my $selstr;
+ if ($k == $i) {
+ $selstr = ' selected="selected" ';
+ }
+ $datatable .= ''.$vpos.' ';
+ }
+ $datatable .= ' '.(' 'x2).
+ ' '.
+ &mt('Delete?').' '.
+ ''.
+ ''.&mt('Required settings').' '.
+ ''.$lt{'title'}.': '.
+ (' 'x2).
+ ''.$lt{'version'}.':'.
+ '1.1 '.
+ (' 'x2).
+ ''.$lt{'msgtype'}.':'.
+ 'Launch '.
+ ' '.
+ ''.$lt{'url'}.': '.
+ (' 'x2).
+ ''.$lt{'key'}.
+ ' '.
+ (' 'x2).
+ ''.$lt{'secret'}.':'.
+ ' '.
+ ' '.&mt('Visible input').' '.
+ ' '.
+ ' '.
+ ''.&mt('Optional settings').' '.
+ ''.&mt('Display target:');
+ my %currdisp;
+ if (ref($settings->{$item}->{'display'}) eq 'HASH') {
+ if ($settings->{$item}->{'display'}->{'target'} eq 'window') {
+ $currdisp{'window'} = ' checked="checked"';
+ } else {
+ $currdisp{'iframe'} = ' checked="checked"';
+ }
+ if ($settings->{$item}->{'display'}->{'width'} =~ /^(\d+)$/) {
+ $currdisp{'width'} = $1;
+ }
+ if ($settings->{$item}->{'display'}->{'height'} =~ /^(\d+)$/) {
+ $currdisp{'height'} = $1;
+ }
+ } else {
+ $currdisp{'iframe'} = ' checked="checked"';
+ }
+ foreach my $disp ('iframe','window') {
+ $datatable .= ' '.
+ $lt{$disp}.' '.(' 'x2);
+ }
+ $datatable .= (' 'x4);
+ foreach my $dimen ('width','height') {
+ $datatable .= ''.$lt{$dimen}.' '.
+ ' '.
+ (' 'x2);
+ }
+ $datatable .= ' ';
+ foreach my $extra ('passback','roster') {
+ my $checkedon = '';
+ my $checkedoff = ' checked="checked"';
+ if ($settings->{$item}->{$extra}) {
+ $checkedon = $checkedoff;
+ $checkedoff = '';
+ }
+ $datatable .= $lt{$extra}.' '.
+ ' '.
+ &mt('Yes').' '.(' 'x2).
+ ' '.
+ &mt('No').' '.(' 'x4);
+ }
+ $datatable .= ''.$lt{'icon'}.': ';
+ if ($imgsrc) {
+ $datatable .= $imgsrc.
+ ' '.&mt('Delete?').' '.
+ ' '.&mt('Replace:').' ';
+ } else {
+ $datatable .= '('.&mt('if larger than 21x21 pixels, image will be scaled').') ';
+ }
+ if ($switchserver) {
+ $datatable .= &mt('Upload to library server: [_1]',$switchserver);
+ } else {
+ $datatable .= ' ';
+ }
+ $datatable .= ' ';
+ my (%checkedfields,%rolemaps);
+ if (ref($settings->{$item}) eq 'HASH') {
+ if (ref($settings->{$item}->{'fields'}) eq 'HASH') {
+ %checkedfields = %{$settings->{$item}->{'fields'}};
+ }
+ if (ref($settings->{$item}->{'roles'}) eq 'HASH') {
+ %rolemaps = %{$settings->{$item}->{'roles'}};
+ $checkedfields{'roles'} = 1;
+ }
+ }
+ $datatable .= ''.&mt('User data sent on launch').' '.
+ '';
+ foreach my $field (@fields) {
+ my $checked;
+ if ($checkedfields{$field}) {
+ $checked = ' checked="checked"';
+ }
+ $datatable .= ''.
+ ' '.
+ $lt{$field}.' '.(' ' x2);
+ }
+ $datatable .= ' '.
+ ''.&mt('Role mapping').' ';
+ foreach my $role (@courseroles) {
+ my ($selected,$selectnone);
+ if (!$rolemaps{$role}) {
+ $selectnone = ' selected="selected"';
+ }
+ $datatable .= ''.
+ &Apache::lonnet::plaintext($role,'Course').' '.
+ ''.
+ ''.&mt('Select').' ';
+ foreach my $ltirole (@ltiroles) {
+ unless ($selectnone) {
+ if ($rolemaps{$role} eq $ltirole) {
+ $selected = ' selected="selected"';
+ } else {
+ $selected = '';
+ }
+ }
+ $datatable .= ''.$ltirole.' ';
+ }
+ $datatable .= ' ';
+ }
+ $datatable .= '
'.
+ ''.&mt('Custom items sent on launch').' '.
+ ' '."\n";
+ $itemcount ++;
+ }
+ }
+ $css_class = $itemcount%2?' class="LC_odd_row"':'';
+ my $chgstr = ' onchange="javascript:reorderLTI(this.form,'."'ltitools_add_pos'".');"';
+ $datatable .= ''."\n".
+ ' '."\n".
+ '';
+ for (my $k=0; $k<$maxnum+1; $k++) {
+ my $vpos = $k+1;
+ my $selstr;
+ if ($k == $maxnum) {
+ $selstr = ' selected="selected" ';
+ }
+ $datatable .= ''.$vpos.' ';
+ }
+ $datatable .= ' '."\n".
+ ' '.&mt('Add').' '."\n".
+ ''.
+ ''.&mt('Required settings').' '.
+ ''.$lt{'title'}.': '."\n".
+ (' 'x2).
+ ''.$lt{'version'}.':'.
+ '1.1 '."\n".
+ (' 'x2).
+ ''.$lt{'msgtype'}.':'.
+ 'Launch '.
+ ' '.
+ ''.$lt{'url'}.': '."\n".
+ (' 'x2).
+ ''.$lt{'key'}.': '."\n".
+ (' 'x2).
+ ''.$lt{'secret'}.': '.
+ ' '.&mt('Visible input').' '."\n".
+ ' '.
+ ''.&mt('Optional settings').' '.
+ ''.&mt('Display target:');
+ my %defaultdisp;
+ $defaultdisp{'iframe'} = ' checked="checked"';
+ foreach my $disp ('iframe','window') {
+ $datatable .= ' '.
+ $lt{$disp}.' '.(' 'x2);
+ }
+ $datatable .= (' 'x4);
+ foreach my $dimen ('width','height') {
+ $datatable .= ''.$lt{$dimen}.' '.
+ ' '.
+ (' 'x2);
+ }
+ $datatable .= ' ';
+ foreach my $extra ('passback','roster') {
+ $datatable .= $lt{$extra}.' '.
+ ' '.
+ &mt('Yes').' '.(' 'x2).
+ ' '.
+ &mt('No').' '.(' 'x4);
+ }
+ $datatable .= ''.$lt{'icon'}.': '.
+ '('.&mt('if larger than 21x21 pixels, image will be scaled').') ';
+ if ($switchserver) {
+ $datatable .= &mt('Upload to library server: [_1]',$switchserver);
+ } else {
+ $datatable .= ' ';
+ }
+ $datatable .= ' '.
+ ''.&mt('User data sent on launch').' '.
+ '';
+ foreach my $field (@fields) {
+ $datatable .= ''.
+ ' '.
+ $lt{$field}.' '.(' ' x2);
+ }
+ $datatable .= ' '.
+ ''.&mt('Role mapping').' ';
+ foreach my $role (@courseroles) {
+ my ($checked,$checkednone);
+ $datatable .= ''.
+ &Apache::lonnet::plaintext($role,'Course').' '.
+ ''.
+ ''.&mt('Select').' ';
+ foreach my $ltirole (@ltiroles) {
+ $datatable .= ''.$ltirole.' ';
+ }
+ $datatable .= ' ';
+ }
+ $datatable .= '
'.
+ ''.&mt('Custom items sent on launch').' '.
+ ' '."\n".
+ ' '."\n".
+ ''."\n";
+ $itemcount ++;
+ return $datatable;
+}
+
+sub ltitools_names {
+ my %lt = &Apache::lonlocal::texthash(
+ 'title' => 'Title',
+ 'version' => 'Version',
+ 'msgtype' => 'Message Type',
+ 'url' => 'URL',
+ 'key' => 'Key',
+ 'secret' => 'Secret',
+ 'icon' => 'Icon',
+ 'user' => 'Username:domain',
+ 'fullname' => 'Full Name',
+ 'firstname' => 'First Name',
+ 'lastname' => 'Last Name',
+ 'email' => 'E-mail',
+ 'roles' => 'Role',
+ 'window' => 'Window/Tab',
+ 'iframe' => 'iFrame',
+ 'height' => 'Height',
+ 'width' => 'Width',
+ 'passback' => 'Tool can return grades:',
+ 'roster' => 'Tool can retrieve roster:',
+ );
+ return %lt;
+}
+
sub print_coursedefaults {
my ($position,$dom,$settings,$rowtotal) = @_;
my ($css_class,$datatable,%checkedon,%checkedoff,%defaultchecked,@toggles);
my $itemcount = 1;
my %choices = &Apache::lonlocal::texthash (
+ canuse_pdfforms => 'Course/Community users can create/upload PDF forms',
uploadquota => 'Default quota for files uploaded directly to course/community using Course Editor (MB)',
anonsurvey_threshold => 'Responder count needed before showing submissions for anonymous surveys',
coursecredits => 'Credits can be specified for courses',
uselcmath => 'Math preview uses LON-CAPA previewer (javascript) in place of DragMath (Java)',
usejsme => 'Molecule editor uses JSME (HTML5) in place of JME (Java)',
postsubmit => 'Disable submit button/keypress following student submission',
- canclone => "People who may clone a course (besides course's owner and coordinators)",
- mysqltables => 'Lifetime (s) of "Temporary" MySQL tables (student performance data) on homeserver',
+ canclone => "People who may clone a course (besides course's owner and coordinators)",
);
my %staticdefaults = (
anonsurvey_threshold => 10,
uploadquota => 500,
postsubmit => 60,
- mysqltables => 172800,
);
if ($position eq 'top') {
%defaultchecked = (
+ 'canuse_pdfforms' => 'off',
'uselcmath' => 'on',
'usejsme' => 'on',
- 'canclone' => 'none',
+ 'canclone' => 'none',
);
- @toggles = ('uselcmath','usejsme');
+ @toggles = ('canuse_pdfforms','uselcmath','usejsme');
($datatable,$itemcount) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked,
\%choices,$itemcount);
$css_class = $itemcount%2?' class="LC_odd_row"':'';
@@ -3544,7 +3361,7 @@ sub print_coursedefaults {
$currcanclone = $settings->{'canclone'};
}
}
- }
+ }
foreach my $option (@cloneoptions) {
my ($checked,$additional);
if ($currcanclone eq $option) {
@@ -3583,7 +3400,7 @@ sub print_coursedefaults {
$itemcount ++;
} else {
$css_class = $itemcount%2 ? ' class="LC_odd_row"' : '';
- my ($currdefresponder,%defcredits,%curruploadquota,%deftimeout,%currmysql);
+ my ($currdefresponder,%defcredits,%curruploadquota,%deftimeout);
my $currusecredits = 0;
my $postsubmitclient = 1;
my @types = ('official','unofficial','community','textbook');
@@ -3613,7 +3430,7 @@ sub print_coursedefaults {
foreach my $type (@types) {
if (ref($settings->{'postsubmit'}->{'timeout'}) eq 'HASH') {
if ($settings->{'postsubmit'}->{'timeout'}->{$type} =~ /^\d+$/) {
- $deftimeout{$type} = $settings->{'postsubmit'}->{'timeout'}->{$type};
+ $deftimeout{$type} = $settings->{'postsubmit'}->{'timeout'}->{$type};
} else {
$deftimeout{$type} = $staticdefaults{'postsubmit'};
}
@@ -3627,15 +3444,6 @@ sub print_coursedefaults {
$deftimeout{$type} = $staticdefaults{'postsubmit'};
}
}
- if (ref($settings->{'mysqltables'}) eq 'HASH') {
- foreach my $type (keys(%{$settings->{'mysqltables'}})) {
- $currmysql{$type} = $settings->{'mysqltables'}{$type};
- }
- } else {
- foreach my $type (@types) {
- $currmysql{$type} = $staticdefaults{'mysqltables'};
- }
- }
} else {
foreach my $type (@types) {
$deftimeout{$type} = $staticdefaults{'postsubmit'};
@@ -3713,27 +3521,13 @@ sub print_coursedefaults {
$additional .= '
'."\n";
%defaultchecked = ('postsubmit' => 'on');
@toggles = ('postsubmit');
- $current = {
- 'postsubmit' => $postsubmitclient,
- };
+ my $current = {
+ 'postsubmit' => $postsubmitclient,
+ };
($table,$itemcount) =
&radiobutton_prefs($current,\@toggles,\%defaultchecked,
\%choices,$itemcount,$onclick,$additional,'left');
$datatable .= $table;
- $css_class = $itemcount%2 ? ' class="LC_odd_row"' : '';
- $datatable .= ' '.
- $choices{'mysqltables'}.
- ' '.
- ''.
- ' '."\n";
- $itemcount ++;
-
}
$$rowtotal += $itemcount;
return $datatable;
@@ -4266,7 +4060,7 @@ sub spares_row {
'.
&mt('[_1] when busy, offloads to:'
,''.$server.' ').' '.
- ''."\n".
+ ''."\n".
' '.
' '.&mt('Switch active users on next access').' '.
"\n";
@@ -4473,9 +4267,6 @@ sub print_loadbalancing {
my ($numspares,@spares) = &count_servers($lonhost,%servers);
my @sparestypes = ('primary','default');
my %typetitles = &sparestype_titles();
- my %hostherechecked = (
- no => ' checked="checked"',
- );
foreach my $sparetype (@sparestypes) {
my $targettable;
for (my $i=0; $i<$numspares; $i++) {
@@ -4521,23 +4312,6 @@ sub print_loadbalancing {
$datatable .= ''.$typetitles{$sparetype}.' '.
' ';
}
- $hostherechecked{$sparetype} = '';
- if (ref($currtargets{$lonhost}) eq 'HASH') {
- if (ref($currtargets{$lonhost}{$sparetype}) eq 'ARRAY') {
- if (grep(/^\Q$lonhost\E$/,@{$currtargets{$lonhost}{$sparetype}})) {
- $hostherechecked{$sparetype} = ' checked="checked"';
- $hostherechecked{'no'} = '';
- }
- }
- }
- }
- $datatable .= &mt('Hosting on balancer itself').' '.
- ' '.&mt('No').' ';
- foreach my $sparetype (@sparestypes) {
- $datatable .= ''.$typetitles{$sparetype}.
- ' ';
}
$datatable .= ''.
&loadbalancing_rules($dom,$intdom,$currrules{$lonhost},
@@ -4755,15 +4529,14 @@ sub sparestype_titles {
sub contact_titles {
my %titles = &Apache::lonlocal::texthash (
- 'supportemail' => 'Support E-mail address',
- '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 for this domain's users",
- 'otherdomsmail' => 'Helpdesk requests for other (unconfigured) domains',
- 'lonstatusmail' => 'E-mail from nightly status check (warnings/errors)',
- 'requestsmail' => 'E-mail from course requests requiring approval',
- 'updatesmail' => 'E-mail from nightly check of LON-CAPA module integrity/updates',
+ 'supportemail' => 'Support E-mail address',
+ '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',
+ 'lonstatusmail' => 'E-mail from nightly status check (warnings/errors)',
+ 'requestsmail' => 'E-mail from course requests requiring approval',
+ 'updatesmail' => 'E-mail from nightly check of LON-CAPA module integrity/updates',
'idconflictsmail' => 'E-mail from bi-nightly check for multiple users sharing same student/employee ID',
);
my %short_titles = &Apache::lonlocal::texthash (
@@ -4773,34 +4546,6 @@ sub contact_titles {
return (\%titles,\%short_titles);
}
-sub helpform_fields {
- my %titles = &Apache::lonlocal::texthash (
- 'username' => 'Name',
- 'user' => 'Username/domain',
- 'phone' => 'Phone',
- 'cc' => 'Cc e-mail',
- 'course' => 'Course Details',
- 'section' => 'Sections',
- 'screenshot' => 'File upload',
- );
- my @fields = ('username','phone','user','course','section','cc','screenshot');
- my %possoptions = (
- username => ['yes','no','req'],
- phone => ['yes','no','req'],
- user => ['yes','no'],
- cc => ['yes','no'],
- course => ['yes','no'],
- section => ['yes','no'],
- screenshot => ['yes','no'],
- );
- my %fieldoptions = &Apache::lonlocal::texthash (
- 'yes' => 'Optional',
- 'req' => 'Required',
- 'no' => "Not shown",
- );
- return (\@fields,\%titles,\%fieldoptions,\%possoptions);
-}
-
sub tool_titles {
my %titles = &Apache::lonlocal::texthash (
aboutme => 'Personal web page',
@@ -5210,8 +4955,7 @@ sub email_as_username {
sub captcha_choice {
my ($context,$settings,$itemcount) = @_;
- my ($keyentry,$currpub,$currpriv,%checked,$rowname,$pubtext,$privtext,
- $vertext,$currver);
+ my ($keyentry,$currpub,$currpriv,%checked,$rowname,$pubtext,$privtext);
my %lt = &captcha_phrases();
$keyentry = 'hidden';
if ($context eq 'cancreate') {
@@ -5229,11 +4973,6 @@ sub captcha_choice {
$pubtext = $lt{'pub'};
$privtext = $lt{'priv'};
$keyentry = 'text';
- $vertext = $lt{'ver'};
- $currver = $settings->{'recaptchaversion'};
- if ($currver ne '2') {
- $currver = 1;
- }
}
if (ref($settings->{'recaptchakeys'}) eq 'HASH') {
$currpub = $settings->{'recaptchakeys'}{'public'};
@@ -5267,11 +5006,7 @@ sub captcha_choice {
$currpub.'" size="40" /> '."\n".
''.$privtext.' '."\n".
' '.
- ''.$vertext.' '."\n".
- ' '.
- '
'."\n".
+ $currpriv.'" size="40" />'."\n".
'';
return $output;
}
@@ -5406,10 +5141,7 @@ sub print_usermodification {
sub print_defaults {
my ($position,$dom,$settings,$rowtotal) = @_;
my $rownum = 0;
- my ($datatable,$css_class,$titles);
- unless ($position eq 'bottom') {
- $titles = &defaults_titles($dom);
- }
+ my ($datatable,$css_class);
if ($position eq 'top') {
my @items = ('auth_def','auth_arg_def','lang_def','timezone_def',
'datelocale_def','portal_def');
@@ -5422,6 +5154,7 @@ sub print_defaults {
$defaults{$item} = $domdefaults{$item};
}
}
+ my $titles = &defaults_titles($dom);
foreach my $item (@items) {
if ($rownum%2) {
$css_class = '';
@@ -5469,87 +5202,8 @@ sub print_defaults {
$datatable .= '';
$rownum ++;
}
- } elsif ($position eq 'middle') {
- my @items = ('intauth_cost','intauth_check','intauth_switch');
- my %defaults;
- if (ref($settings) eq 'HASH') {
- %defaults = %{$settings};
- if ($defaults{'intauth_cost'} !~ /^\d+$/) {
- $defaults{'intauth_cost'} = 10;
- }
- if ($defaults{'intauth_check'} !~ /^(0|1|2)$/) {
- $defaults{'intauth_check'} = 0;
- }
- if ($defaults{'intauth_switch'} !~ /^(0|1|2)$/) {
- $defaults{'intauth_switch'} = 0;
- }
- } else {
- %defaults = (
- 'intauth_cost' => 10,
- 'intauth_check' => 0,
- 'intauth_switch' => 0,
- );
- }
- foreach my $item (@items) {
- if ($rownum%2) {
- $css_class = '';
- } else {
- $css_class = ' class="LC_odd_row" ';
- }
- $datatable .= ''.
- ''.$titles->{$item}.
- ' ';
- if ($item eq 'intauth_switch') {
- my @options = (0,1,2);
- my %optiondesc = &Apache::lonlocal::texthash (
- 0 => 'No',
- 1 => 'Yes',
- 2 => 'Yes, and copy existing passwd file to passwd.bak file',
- );
- $datatable .= '';
- } elsif ($item eq 'intauth_check') {
- my @options = (0,1,2);
- my %optiondesc = &Apache::lonlocal::texthash (
- 0 => 'No',
- 1 => 'Yes, allow login then update passwd file using default cost (if higher)',
- 2 => 'Yes, disallow login if stored cost is less than domain default',
- );
- $datatable .= '';
- } else {
- $datatable .= ' ';
- }
- $datatable .= ' ';
- $rownum ++;
- }
} else {
- my %defaults;
+ my (%defaults);
if (ref($settings) eq 'HASH') {
if ((ref($settings->{'inststatusorder'}) eq 'ARRAY') && (ref($settings->{'inststatustypes'}) eq 'HASH') &&
(ref($settings->{'inststatusguest'}) eq 'ARRAY')) {
@@ -5644,9 +5298,6 @@ sub defaults_titles {
'timezone_def' => 'Default timezone',
'datelocale_def' => 'Default locale for dates',
'portal_def' => 'Portal/Default URL',
- 'intauth_cost' => 'Encryption cost for bcrypt (positive integer)',
- 'intauth_check' => 'Check bcrypt cost if authenticated',
- 'intauth_switch' => 'Existing crypt-based switched to bcrypt on authentication',
);
if ($dom) {
my $uprimary_id = &Apache::lonnet::domain($dom,'primary');
@@ -6150,35 +5801,7 @@ sub serverstatus_pages {
sub defaults_javascript {
my ($settings) = @_;
- my $intauthcheck = &mt('Warning: disallowing login for an authenticated user if the stored cost is less than the default will require a password reset by/for the user.');
- my $intauthcost = &mt('Warning: bcrypt encryption cost for internal authentication must be an integer.');
- &js_escape(\$intauthcheck);
- &js_escape(\$intauthcost);
- my $intauthjs = <<"ENDSCRIPT";
-
-function warnIntAuth(field) {
- if (field.name == 'intauth_check') {
- if (field.value == '2') {
- alert('$intauthcheck');
- }
- }
- if (field.name == 'intauth_cost') {
- field.value.replace(/\s/g,'');
- if (field.value != '') {
- var regexdigit=/^\\d+\$/;
- if (!regexdigit.test(field.value)) {
- alert('$intauthcost');
- }
- }
- }
- return;
-}
-
-ENDSCRIPT
-
- if (ref($settings) ne 'HASH') {
- return &Apache::lonhtmlcommon::scripttag($intauthjs);
- }
+ return unless (ref($settings) eq 'HASH');
if ((ref($settings->{'inststatusorder'}) eq 'ARRAY') && (ref($settings->{'inststatustypes'}) eq 'HASH')) {
my $maxnum = scalar(@{$settings->{'inststatusorder'}});
if ($maxnum eq '') {
@@ -6232,14 +5855,10 @@ $jstext
return;
}
-$intauthjs
-
// ]]>
ENDSCRIPT
- } else {
- return &Apache::lonhtmlcommon::scripttag($intauthjs);
}
}
@@ -6947,7 +6566,7 @@ sub modify_login {
if ($domservers{$lonhost}) {
if (ref($domconfig{'login'}{'headtag'}{$lonhost}) eq 'HASH') {
$currheadtagurls{$lonhost} = $domconfig{'login'}{'headtag'}{$lonhost}{'url'};
- $currexempt{$lonhost} = $domconfig{'login'}{'headtag'}{$lonhost}{'exempt'};
+ $currexempt{$lonhost} = $domconfig{'login'}{'headtagexempt'}{$lonhost}{'exempt'}
}
}
}
@@ -6966,7 +6585,7 @@ sub modify_login {
} elsif ($currheadtagurls{$lonhost}) {
$loginhash{'login'}{'headtag'}{$lonhost}{'url'} = $currheadtagurls{$lonhost};
if ($currexempt{$lonhost}) {
- if ((!exists($possexempt{$lonhost})) || ($possexempt{$lonhost} ne $currexempt{$lonhost})) {
+ if ((!exists($possexempt{$lonhost})) || ($possexempt{$lonhost} ne $currexempt{$lonhost})) {
$changes{'headtag'}{$lonhost} = 1;
}
} elsif ($possexempt{$lonhost}) {
@@ -7172,13 +6791,6 @@ sub modify_login {
$chgtxt .= '';
$resulttext .= ''.$chgtxt.' ';
}
- } elsif ($item eq 'recaptchaversion') {
- if (ref($loginhash{'login'}) eq 'HASH') {
- if ($loginhash{'login'}{'captcha'} eq 'recaptcha') {
- $resulttext .= ''.&mt('ReCAPTCHA for helpdesk form set to version [_1]',$loginhash{'login'}{'recaptchaversion'}).
- ' ';
- }
- }
} else {
$resulttext .= ''.&mt("$title{$item} set to $offon[$env{'form.'.$item}]").' ';
}
@@ -7198,6 +6810,7 @@ sub modify_login {
return $resulttext;
}
+
sub check_exempt_addresses {
my ($iplist) = @_;
$iplist =~ s/^\s+//;
@@ -7670,7 +7283,7 @@ sub check_authorstatus {
sub publishlogo {
my ($r,$action,$formname,$dom,$confname,$subdir,$thumbwidth,$thumbheight,$savefileas) = @_;
- my ($output,$fname,$logourl);
+ my ($output,$fname,$logourl,$madethumb);
if ($action eq 'upload') {
$fname=$env{'form.'.$formname.'.filename'};
chop($env{'form.'.$formname});
@@ -7798,6 +7411,7 @@ $env{'user.name'}.':'.$env{'user.domain'
$r->set_handlers('PerlCleanupHandler' => [\¬ifysubscribed,@{$handlers}]);
$registered_cleanup=1;
}
+ $madethumb = 1;
} else {
print $logfile "\nUnable to write ".$copyfile.
':'.$!."\n";
@@ -7810,7 +7424,7 @@ $env{'user.name'}.':'.$env{'user.domain'
$output = $versionresult;
}
}
- return ($output,$logourl);
+ return ($output,$logourl,$madethumb);
}
sub logo_versioning {
@@ -8107,7 +7721,7 @@ sub modify_quotas {
my $newpos = $env{'form.'.$itemid};
$newpos =~ s/\D+//g;
foreach my $item ('subject','title','publisher','author') {
- next if ((($item eq 'author') || ($item eq 'publisher')) &&
+ next if ((($item eq 'author') || ($item eq 'publisher')) &&
($type eq 'templates'));
$confhash{$type}{$key}{$item} = $env{'form.'.$type.'_'.$item.'_'.$i};
if ($domconfig{$action}{$type}{$key}{$item} ne $confhash{$type}{$key}{$item}) {
@@ -8252,7 +7866,7 @@ sub modify_quotas {
}
if ($env{'form.validationdc'}) {
my $newval = $env{'form.validationdc'};
- my %domcoords = &Apache::lonnet::get_active_domroles($dom,['dc']);
+ my %domcoords = &get_active_dcs($dom);
if (exists($domcoords{$newval})) {
$confhash{'validation'}{'dc'} = $newval;
}
@@ -8276,7 +7890,7 @@ sub modify_quotas {
}
} elsif ($confhash{'validation'}{'dc'} ne '') {
$changes{'validation'}{'dc'} = $confhash{'validation'}{'dc'};
- }
+ }
} else {
if (ref($domconfig{'requestcourses'}) eq 'HASH') {
if (ref($domconfig{'requestcourses'}{'validation'}) eq 'HASH') {
@@ -8679,6 +8293,495 @@ sub process_textbook_image {
return ($url,$error);
}
+sub modify_ltitools {
+ my ($r,$dom,$action,$lastactref,%domconfig) = @_;
+ my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1);
+ my ($newid,@allpos,%changes,%confhash,$errors,$resulttext);
+ my $confname = $dom.'-domainconfig';
+ my $servadm = $r->dir_config('lonAdmEMail');
+ my ($configuserok,$author_ok,$switchserver) = &config_check($dom,$confname,$servadm);
+ my (%posslti,%possfield);
+ my @courseroles = ('cc','in','ta','ep','st');
+ my @ltiroles = qw(Instructor ContentDeveloper TeachingAssistant Learner);
+ map { $posslti{$_} = 1; } @ltiroles;
+ my @allfields = ('fullname','firstname','lastname','email','user','roles');
+ map { $possfield{$_} = 1; } @allfields;
+ my %lt = <itools_names();
+ if ($env{'form.ltitools_add'}) {
+ my $title = $env{'form.ltitools_add_title'};
+ $title =~ s/(`)/'/g;
+ ($newid,my $error) = &get_ltitools_id($dom,$title);
+ if ($newid) {
+ my $position = $env{'form.ltitools_add_pos'};
+ $position =~ s/\D+//g;
+ if ($position ne '') {
+ $allpos[$position] = $newid;
+ }
+ $changes{$newid} = 1;
+ foreach my $item ('title','url','key','secret') {
+ $env{'form.ltitools_add_'.$item} =~ s/(`)/'/g;
+ if ($env{'form.ltitools_add_'.$item}) {
+ $confhash{$newid}{$item} = $env{'form.ltitools_add_'.$item};
+ }
+ }
+ if ($env{'form.ltitools_add_version'} eq 'LTI-1p0') {
+ $confhash{$newid}{'version'} = $env{'form.ltitools_add_version'};
+ }
+ if ($env{'form.ltitools_add_msgtype'} eq 'basic-lti-launch-request') {
+ $confhash{$newid}{'msgtype'} = $env{'form.ltitools_add_msgtype'};
+ }
+ foreach my $item ('width','height') {
+ $env{'form.ltitools_add_'.$item} =~ s/^\s+//;
+ $env{'form.ltitools_add_'.$item} =~ s/\s+$//;
+ if ($env{'form.ltitools_add_'.$item} =~ /^\d+$/) {
+ $confhash{$newid}{'display'}{$item} = $env{'form.ltitools_add_'.$item};
+ }
+ }
+ if ($env{'form.ltitools_add_target'} eq 'window') {
+ $confhash{$newid}{'display'}{'target'} = $env{'form.ltitools_add_target'};
+ } else {
+ $confhash{$newid}{'display'}{'target'} = 'iframe';
+ }
+ foreach my $item ('passback','roster') {
+ if ($env{'form.ltitools_add_'.$item}) {
+ $confhash{$newid}{$item} = 1;
+ }
+ }
+ if ($env{'form.ltitools_add_image.filename'} ne '') {
+ my ($imageurl,$error) =
+ &process_ltitools_image($r,$dom,$confname,'ltitools_add_image',$dom,
+ $configuserok,$switchserver,$author_ok);
+ if ($imageurl) {
+ $confhash{$newid}{'image'} = $imageurl;
+ }
+ if ($error) {
+ &Apache::lonnet::logthis($error);
+ $errors .= ''.$error.' ';
+ }
+ }
+ my @fields = &Apache::loncommon::get_env_multiple('form.ltitools_add_fields');
+ foreach my $field (@fields) {
+ if ($possfield{$field}) {
+ if ($field eq 'roles') {
+ foreach my $role (@courseroles) {
+ my $choice = $env{'form.ltitools_add_roles_'.$role};
+ if (($choice ne '') && ($posslti{$choice})) {
+ $confhash{$newid}{'roles'}{$role} = $choice;
+ if ($role eq 'cc') {
+ $confhash{$newid}{'roles'}{'co'} = $choice;
+ }
+ }
+ }
+ } else {
+ $confhash{$newid}{'fields'}{$field} = 1;
+ }
+ }
+ }
+ if ($env{'form.ltitools_add_custom'}) {
+ my $name = $env{'form.ltitools_add_custom_name'};
+ my $value = $env{'form.ltitools_add_custom_value'};
+ $value =~ s/(`)/'/g;
+ $name =~ s/(`)/'/g;
+ $confhash{$newid}{'custom'}{$name} = $value;
+ }
+ } else {
+ my $error = &mt('Failed to acquire unique ID for new external tool');
+ $errors .= ''.$error.' ';
+ }
+ }
+ if (ref($domconfig{$action}) eq 'HASH') {
+ my %deletions;
+ my @todelete = &Apache::loncommon::get_env_multiple('form.ltitools_del');
+ if (@todelete) {
+ map { $deletions{$_} = 1; } @todelete;
+ }
+ my %customadds;
+ my @newcustom = &Apache::loncommon::get_env_multiple('form.ltitools_customadd');
+ if (@newcustom) {
+ map { $customadds{$_} = 1; } @newcustom;
+ }
+ my %imgdeletions;
+ my @todeleteimages = &Apache::loncommon::get_env_multiple('form.ltitools_image_del');
+ if (@todeleteimages) {
+ map { $imgdeletions{$_} = 1; } @todeleteimages;
+ }
+ my $maxnum = $env{'form.ltitools_maxnum'};
+ for (my $i=0; $i<=$maxnum; $i++) {
+ my $itemid = $env{'form.ltitools_id_'.$i};
+ if (ref($domconfig{$action}{$itemid}) eq 'HASH') {
+ if ($deletions{$itemid}) {
+ if ($domconfig{$action}{$itemid}{'image'}) {
+ #FIXME need to obsolete item in RES space
+ }
+ $changes{$itemid} = $domconfig{$action}{$itemid}{'title'};
+ next;
+ } else {
+ my $newpos = $env{'form.ltitools_'.$itemid};
+ $newpos =~ s/\D+//g;
+ foreach my $item ('title','url','key','secret') {
+ $confhash{$itemid}{$item} = $env{'form.ltitools_'.$item.'_'.$i};
+ if ($domconfig{$action}{$itemid}{$item} ne $confhash{$itemid}{$item}) {
+ $changes{$itemid} = 1;
+ }
+ }
+ if ($env{'form.ltitools_version_'.$i} eq 'LTI-1p0') {
+ $confhash{$itemid}{'version'} = $env{'form.ltitools_version_'.$i};
+ }
+ if ($env{'form.ltitools_msgtype_'.$i} eq 'basic-lti-launch-request') {
+ $confhash{$itemid}{'msgtype'} = $env{'form.ltitools_msgtype_'.$i};
+ }
+ foreach my $size ('width','height') {
+ $env{'form.ltitools_'.$size.'_'.$i} =~ s/^\s+//;
+ $env{'form.ltitools_'.$size.'_'.$i} =~ s/\s+$//;
+ if ($env{'form.ltitools_'.$size.'_'.$i} =~ /^\d+$/) {
+ $confhash{$itemid}{'display'}{$size} = $env{'form.ltitools_'.$size.'_'.$i};
+ if (ref($domconfig{$action}{$itemid}{'display'}) eq 'HASH') {
+ if ($domconfig{$action}{$itemid}{'display'}{$size} ne $confhash{$itemid}{'display'}{$size}) {
+ $changes{$itemid} = 1;
+ }
+ } else {
+ $changes{$itemid} = 1;
+ }
+ }
+ }
+ if ($env{'form.ltitools_target_'.$i} eq 'window') {
+ $confhash{$itemid}{'display'}{'target'} = $env{'form.ltitools_target_'.$i};
+ } else {
+ $confhash{$itemid}{'display'}{'target'} = 'iframe';
+ }
+ if (ref($domconfig{$action}{$itemid}{'display'}) eq 'HASH') {
+ if ($domconfig{$action}{$itemid}{'display'}{'target'} ne $confhash{$itemid}{'display'}{'target'}) {
+ $changes{$itemid} = 1;
+ }
+ } else {
+ $changes{$itemid} = 1;
+ }
+ foreach my $extra ('passback','roster') {
+ if ($env{'form.ltitools_'.$extra.'_'.$i}) {
+ $confhash{$itemid}{$extra} = 1;
+ }
+ if ($domconfig{$action}{$itemid}{$extra} ne $confhash{$itemid}{$extra}) {
+ $changes{$itemid} = 1;
+ }
+ }
+ my @fields = &Apache::loncommon::get_env_multiple('form.ltitools_fields_'.$i);
+ foreach my $field (@fields) {
+ if ($possfield{$field}) {
+ if ($field eq 'roles') {
+ foreach my $role (@courseroles) {
+ my $choice = $env{'form.ltitools_roles_'.$role.'_'.$i};
+ if (($choice ne '') && ($posslti{$choice})) {
+ $confhash{$itemid}{'roles'}{$role} = $choice;
+ if ($role eq 'cc') {
+ $confhash{$itemid}{'roles'}{'co'} = $choice;
+ }
+ }
+ if (ref($domconfig{$action}{$itemid}{'roles'}) eq 'HASH') {
+ if ($domconfig{$action}{$itemid}{'roles'}{$role} ne $confhash{$itemid}{'roles'}{$role}) {
+ $changes{$itemid} = 1;
+ }
+ } elsif ($confhash{$itemid}{'roles'}{$role}) {
+ $changes{$itemid} = 1;
+ }
+ }
+ } else {
+ $confhash{$itemid}{'fields'}{$field} = 1;
+ if (ref($domconfig{$action}{$itemid}{'fields'}) eq 'HASH') {
+ if ($domconfig{$action}{$itemid}{'fields'}{$field} ne $confhash{$itemid}{'fields'}{$field}) {
+ $changes{$itemid} = 1;
+ }
+ } else {
+ $changes{$itemid} = 1;
+ }
+ }
+ }
+ }
+ $allpos[$newpos] = $itemid;
+ }
+ if ($imgdeletions{$itemid}) {
+ $changes{$itemid} = 1;
+ #FIXME need to obsolete item in RES space
+ } elsif ($env{'form.ltitools_image_'.$i.'.filename'}) {
+ my ($imgurl,$error) = &process_ltitools_image($r,$dom,$confname,'ltitools_image_'.$i,
+ $itemid,$configuserok,$switchserver,
+ $author_ok);
+ if ($imgurl) {
+ $confhash{$itemid}{'image'} = $imgurl;
+ $changes{$itemid} = 1;
+ }
+ if ($error) {
+ &Apache::lonnet::logthis($error);
+ $errors .= ''.$error.' ';
+ }
+ } elsif ($domconfig{$action}{$itemid}{'image'}) {
+ $confhash{$itemid}{'image'} =
+ $domconfig{$action}{$itemid}{'image'};
+ }
+ if ($customadds{$i}) {
+ my $name = $env{'form.ltitools_custom_name_'.$i};
+ $name =~ s/(`)/'/g;
+ $name =~ s/^\s+//;
+ $name =~ s/\s+$//;
+ my $value = $env{'form.ltitools_custom_value_'.$i};
+ $value =~ s/(`)/'/g;
+ $value =~ s/^\s+//;
+ $value =~ s/\s+$//;
+ if ($name ne '') {
+ $confhash{$itemid}{'custom'}{$name} = $value;
+ $changes{$itemid} = 1;
+ }
+ }
+ my %customdels;
+ my @customdeletions = &Apache::loncommon::get_env_multiple('form.ltitools_customdel_'.$i);
+ if (@customdeletions) {
+ $changes{$itemid} = 1;
+ }
+ map { $customdels{$_} = 1; } @customdeletions;
+ if (ref($domconfig{$action}{$itemid}{'custom'}) eq 'HASH') {
+ foreach my $key (keys(%{$domconfig{$action}{$itemid}{'custom'}})) {
+ unless ($customdels{$key}) {
+ if ($env{'form.ltitools_customval_'.$key.'_'.$i} ne '') {
+ $confhash{$itemid}{'custom'}{$key} = $env{'form.ltitools_customval_'.$key.'_'.$i};
+ }
+ if ($domconfig{$action}{$itemid}{'custom'}{$key} ne $env{'form.ltitools_customval_'.$key.'_'.$i}) {
+ $changes{$itemid} = 1;
+ }
+ }
+ }
+ }
+ unless ($changes{$itemid}) {
+ foreach my $key (keys(%{$domconfig{$action}{$itemid}})) {
+ if (ref($domconfig{$action}{$itemid}{$key}) eq 'HASH') {
+ if (ref($confhash{$itemid}{$key}) eq 'HASH') {
+ foreach my $innerkey (keys(%{$domconfig{$action}{$itemid}{$key}})) {
+ unless (exists($confhash{$itemid}{$key}{$innerkey})) {
+ $changes{$itemid} = 1;
+ last;
+ }
+ }
+ } elsif (keys(%{$domconfig{$action}{$itemid}{$key}}) > 0) {
+ $changes{$itemid} = 1;
+ }
+ }
+ last if ($changes{$itemid});
+ }
+ }
+ }
+ }
+ }
+ if (@allpos > 0) {
+ my $idx = 0;
+ foreach my $itemid (@allpos) {
+ if ($itemid ne '') {
+ $confhash{$itemid}{'order'} = $idx;
+ if (ref($domconfig{$action}) eq 'HASH') {
+ if (ref($domconfig{$action}{$itemid}) eq 'HASH') {
+ if ($domconfig{$action}{$itemid}{'order'} ne $idx) {
+ $changes{$itemid} = 1;
+ }
+ }
+ }
+ $idx ++;
+ }
+ }
+ }
+ my %ltitoolshash = (
+ $action => { %confhash }
+ );
+ my $putresult = &Apache::lonnet::put_dom('configuration',\%ltitoolshash,
+ $dom);
+ if ($putresult eq 'ok') {
+ if (keys(%changes) > 0) {
+ my $cachetime = 24*60*60;
+ &Apache::lonnet::do_cache_new('ltitools',$dom,\%confhash,$cachetime);
+ if (ref($lastactref) eq 'HASH') {
+ $lastactref->{'ltitools'} = 1;
+ }
+ $resulttext = &mt('Changes made:').'';
+ my %bynum;
+ foreach my $itemid (sort(keys(%changes))) {
+ my $position = $confhash{$itemid}{'order'};
+ $bynum{$position} = $itemid;
+ }
+ foreach my $pos (sort { $a <=> $b } keys(%bynum)) {
+ my $itemid = $bynum{$pos};
+ if (ref($confhash{$itemid}) ne 'HASH') {
+ $resulttext .= ''.&mt('Deleted: [_1]',$changes{$itemid}).' ';
+ } else {
+ $resulttext .= ''.$confhash{$itemid}{'title'}.' ';
+ if ($confhash{$itemid}{'image'}) {
+ $resulttext .= ' '.
+ ' ';
+ }
+ $resulttext .= '';
+ my $position = $pos + 1;
+ $resulttext .= ''.&mt('Order: [_1]',$position).' ';
+ foreach my $item ('version','msgtype','url','key') {
+ if ($confhash{$itemid}{$item} ne '') {
+ $resulttext .= ''.$lt{$item}.': '.$confhash{$itemid}{$item}.' ';
+ }
+ }
+ if ($confhash{$itemid}{'secret'} ne '') {
+ $resulttext .= ''.$lt{'secret'}.': ';
+ my $num = length($confhash{$itemid}{'secret'});
+ $resulttext .= ('*'x$num).' ';
+ }
+ foreach my $item ('passback','roster') {
+ $resulttext .= ''.$lt{$item}.' ';
+ if ($confhash{$itemid}{$item}) {
+ $resulttext .= &mt('Yes');
+ } else {
+ $resulttext .= &mt('No');
+ }
+ $resulttext .= ' ';
+ }
+ if (ref($confhash{$itemid}{'display'}) eq 'HASH') {
+ my $displaylist;
+ if ($confhash{$itemid}{'display'}{'target'}) {
+ $displaylist = &mt('Display target').': '.
+ $confhash{$itemid}{'display'}{'target'}.',';
+ }
+ foreach my $size ('width','height') {
+ if ($confhash{$itemid}{'display'}{$size}) {
+ $displaylist .= (' 'x2).$lt{$size}.': '.
+ $confhash{$itemid}{'display'}{$size}.',';
+ }
+ }
+ if ($displaylist) {
+ $displaylist =~ s/,$//;
+ $resulttext .= ''.$displaylist.' ';
+ }
+ }
+ if (ref($confhash{$itemid}{'fields'}) eq 'HASH') {
+ my $fieldlist;
+ foreach my $field (@allfields) {
+ if ($confhash{$itemid}{'fields'}{$field}) {
+ $fieldlist .= (' 'x2).$lt{$field}.',';
+ }
+ }
+ if ($fieldlist) {
+ $fieldlist =~ s/,$//;
+ $resulttext .= ''.&mt('Data sent').':'.$fieldlist.' ';
+ }
+ }
+ if (ref($confhash{$itemid}{'roles'}) eq 'HASH') {
+ my $rolemaps;
+ foreach my $role (@courseroles) {
+ if ($confhash{$itemid}{'roles'}{$role}) {
+ $rolemaps .= (' 'x2).&Apache::lonnet::plaintext($role,'Course').'='.
+ $confhash{$itemid}{'roles'}{$role}.',';
+ }
+ }
+ if ($rolemaps) {
+ $rolemaps =~ s/,$//;
+ $resulttext .= ''.&mt('Role mapping:').$rolemaps.' ';
+ }
+ }
+ if (ref($confhash{$itemid}{'custom'}) eq 'HASH') {
+ my $customlist;
+ if (keys(%{$confhash{$itemid}{'custom'}})) {
+ foreach my $key (sort(keys(%{$confhash{$itemid}{'custom'}}))) {
+ $customlist .= $key.':'.$confhash{$itemid}{'custom'}{$key}.(' 'x2);
+ }
+ }
+ if ($customlist) {
+ $resulttext .= ''.&mt('Custom items').':'.$customlist.' ';
+ }
+ }
+ $resulttext .= ' ';
+ }
+ }
+ $resulttext .= ' ';
+ } else {
+ $resulttext = &mt('No changes made.');
+ }
+ } else {
+ $errors .= ''.&mt('Failed to save changes').' ';
+ }
+ if ($errors) {
+ $resulttext .= &mt('The following errors occurred: ').'';
+ }
+ return $resulttext;
+}
+
+sub process_ltitools_image {
+ my ($r,$dom,$confname,$caller,$itemid,$configuserok,$switchserver,$author_ok) = @_;
+ my $filename = $env{'form.'.$caller.'.filename'};
+ my ($error,$url);
+ my ($width,$height) = (21,21);
+ if ($configuserok eq 'ok') {
+ if ($switchserver) {
+ $error = &mt('Upload of Tool Provider (LTI) icon is not permitted to this server: [_1]',
+ $switchserver);
+ } elsif ($author_ok eq 'ok') {
+ my ($result,$imageurl,$madethumb) =
+ &publishlogo($r,'upload',$caller,$dom,$confname,
+ "ltitools/$itemid/icon",$width,$height);
+ if ($result eq 'ok') {
+ if ($madethumb) {
+ my ($path,$imagefile) = ($imageurl =~ m{^(.+)/([^/]+)$});
+ my $imagethumb = "$path/tn-".$imagefile;
+ $url = $imagethumb;
+ } else {
+ $url = $imageurl;
+ }
+ } else {
+ $error = &mt("Upload of [_1] failed because an error occurred publishing the file in RES space. Error was: [_2].",$filename,$result);
+ }
+ } else {
+ $error = &mt("Upload of [_1] failed because an author role could not be assigned to a Domain Configuration user ([_2]) in domain: [_3]. Error was: [_4].",$filename,$confname,$dom,$author_ok);
+ }
+ } else {
+ $error = &mt("Upload of [_1] failed because a Domain Configuration user ([_2]) could not be created in domain: [_3]. Error was: [_4].",$filename,$confname,$dom,$configuserok);
+ }
+ return ($url,$error);
+}
+
+sub get_ltitools_id {
+ my ($cdom,$title) = @_;
+ # get lock on ltitools db
+ my $lockhash = {
+ lock => $env{'user.name'}.
+ ':'.$env{'user.domain'},
+ };
+ my $tries = 0;
+ my $gotlock = &Apache::lonnet::newput_dom('ltitools',$lockhash,$cdom);
+ my ($id,$error);
+
+ while (($gotlock ne 'ok') && ($tries<10)) {
+ $tries ++;
+ sleep (0.1);
+ $gotlock = &Apache::lonnet::newput_dom('ltitools',$lockhash,$cdom);
+ }
+ if ($gotlock eq 'ok') {
+ my %currids = &Apache::lonnet::dump_dom('ltitools',$cdom);
+ if ($currids{'lock'}) {
+ delete($currids{'lock'});
+ if (keys(%currids)) {
+ my @curr = sort { $a <=> $b } keys(%currids);
+ if ($curr[-1] =~ /^\d+$/) {
+ $id = 1 + $curr[-1];
+ }
+ } else {
+ $id = 1;
+ }
+ if ($id) {
+ unless (&Apache::lonnet::newput_dom('ltitools',{ $id => $title },$cdom) eq 'ok') {
+ $error = 'nostore';
+ }
+ } else {
+ $error = 'nonumber';
+ }
+ }
+ my $dellockoutcome = &Apache::lonnet::del_dom('ltitools',['lock'],$cdom);
+ } else {
+ $error = 'nolock';
+ }
+ return ($id,$error);
+}
+
sub modify_autoenroll {
my ($dom,$lastactref,%domconfig) = @_;
my ($resulttext,%changes);
@@ -8691,8 +8794,7 @@ sub modify_autoenroll {
my $autorun = &Apache::lonnet::auto_run(undef,$dom),
my %title = ( run => 'Auto-enrollment active',
sender => 'Sender for notification messages',
- coowners => 'Automatic assignment of co-ownership to instructors of record (institutional data)',
- failsafe => 'Failsafe for no drops if institutional data missing for a section');
+ coowners => 'Automatic assignment of co-ownership to instructors of record (institutional data)');
my @offon = ('off','on');
my $sender_uname = $env{'form.sender_uname'};
my $sender_domain = $env{'form.sender_domain'};
@@ -8702,17 +8804,11 @@ sub modify_autoenroll {
$sender_domain = '';
}
my $coowners = $env{'form.autoassign_coowners'};
- my $failsafe = $env{'form.autoenroll_failsafe'};
- $failsafe =~ s{^\s+|\s+$}{}g;
- if ($failsafe =~ /\D/) {
- undef($failsafe);
- }
my %autoenrollhash = (
autoenroll => { 'run' => $env{'form.autoenroll_run'},
'sender_uname' => $sender_uname,
'sender_domain' => $sender_domain,
'co-owners' => $coowners,
- 'autofailsafe' => $failsafe,
}
);
my $putresult = &Apache::lonnet::put_dom('configuration',\%autoenrollhash,
@@ -8739,10 +8835,7 @@ sub modify_autoenroll {
}
} elsif ($coowners) {
$changes{'coowners'} = 1;
- }
- if ($currautoenroll{'autofailsafe'} ne $failsafe) {
- $changes{'autofailsafe'} = 1;
- }
+ }
if (keys(%changes) > 0) {
$resulttext = &mt('Changes made:').'';
if ($changes{'run'}) {
@@ -8762,17 +8855,6 @@ sub modify_autoenroll {
$lastactref->{'domainconfig'} = 1;
}
}
- if ($changes{'autofailsafe'}) {
- if ($failsafe ne '') {
- $resulttext .= ''.&mt('Failsafe for no drops if institutional data missing for a section set to: [_1]',$failsafe).' ';
- } else {
- $resulttext .= ''.&mt('Failsafe for no drops if institutional data missing for a section: deleted');
- }
- &Apache::lonnet::get_domain_defaults($dom,1);
- if (ref($lastactref) eq 'HASH') {
- $lastactref->{'domdefaults'} = 1;
- }
- }
$resulttext .= ' ';
} else {
$resulttext = &mt('No changes made to auto-enrollment settings');
@@ -8988,7 +9070,7 @@ sub modify_autocreate {
$newvals{$item} = 0 if ($newvals{$item} eq '');
}
$newvals{'xmldc'} = $env{'form.autocreate_xmldc'};
- my %domcoords = &Apache::lonnet::get_active_domroles($dom,['dc']);
+ my %domcoords = &get_active_dcs($dom);
unless (exists($domcoords{$newvals{'xmldc'}})) {
$newvals{'xmldc'} = '';
}
@@ -9045,7 +9127,7 @@ sub modify_autocreate {
}
sub modify_directorysrch {
- my ($dom,$lastactref,%domconfig) = @_;
+ my ($dom,%domconfig) = @_;
my ($resulttext,%changes);
my %currdirsrch;
if (ref($domconfig{'directorysrch'}) eq 'HASH') {
@@ -9053,10 +9135,8 @@ sub modify_directorysrch {
$currdirsrch{$key} = $domconfig{'directorysrch'}{$key};
}
}
- my %title = ( available => 'Institutional directory search available',
- localonly => 'Other domains can search institution',
- lcavailable => 'LON-CAPA directory search available',
- lclocalonly => 'Other domains can search LON-CAPA domain',
+ my %title = ( available => 'Directory search available',
+ localonly => 'Other domains can search',
searchby => 'Search types',
searchtypes => 'Search latitude');
my @offon = ('off','on');
@@ -9130,9 +9210,7 @@ sub modify_directorysrch {
my %dirsrch_hash = (
directorysrch => { available => $env{'form.dirsrch_available'},
cansearch => \@cansearch,
- localonly => $env{'form.dirsrch_instlocalonly'},
- lclocalonly => $env{'form.dirsrch_domlocalonly'},
- lcavailable => $env{'form.dirsrch_domavailable'},
+ localonly => $env{'form.dirsrch_localonly'},
searchby => \@searchby,
searchtypes => \@searchtypes,
}
@@ -9149,47 +9227,24 @@ sub modify_directorysrch {
$changes{'available'} = 1;
}
}
- if (exists($currdirsrch{'lcavailable'})) {
- if ($currdirsrch{'lcavailable'} ne $env{'form.dirsrch_domavailable'}) {
- $changes{'lcavailable'} = 1;
- }
- } else {
- if ($env{'form.dirsrch_lcavailable'} eq '1') {
- $changes{'lcavailable'} = 1;
- }
- }
if (exists($currdirsrch{'localonly'})) {
- if ($currdirsrch{'localonly'} ne $env{'form.dirsrch_instlocalonly'}) {
- $changes{'localonly'} = 1;
- }
+ if ($currdirsrch{'localonly'} ne $env{'form.dirsrch_localonly'}) {
+ $changes{'localonly'} = 1;
+ }
} else {
- if ($env{'form.dirsrch_instlocalonly'} eq '1') {
+ if ($env{'form.dirsrch_localonly'} eq '1') {
$changes{'localonly'} = 1;
}
}
- if (exists($currdirsrch{'lclocalonly'})) {
- if ($currdirsrch{'lclocalonly'} ne $env{'form.dirsrch_domlocalonly'}) {
- $changes{'lclocalonly'} = 1;
- }
- } else {
- if ($env{'form.dirsrch_domlocalonly'} eq '1') {
- $changes{'lclocalonly'} = 1;
- }
- }
if (keys(%changes) > 0) {
$resulttext = &mt('Changes made:').'';
if ($changes{'available'}) {
$resulttext .= ''.&mt("$title{'available'} set to: $offon[$env{'form.dirsrch_available'}]").' ';
}
- if ($changes{'lcavailable'}) {
- $resulttext .= ''.&mt("$title{'lcavailable'} set to: $offon[$env{'form.dirsrch_domavailable'}]").' ';
- }
if ($changes{'localonly'}) {
- $resulttext .= ''.&mt("$title{'localonly'} set to: $otherdoms[$env{'form.dirsrch_instlocalonly'}]").' ';
- }
- if ($changes{'lclocalonly'}) {
- $resulttext .= ''.&mt("$title{'lclocalonly'} set to: $otherdoms[$env{'form.dirsrch_domlocalonly'}]").' ';
+ $resulttext .= ''.&mt("$title{'localonly'} set to: $otherdoms[$env{'form.dirsrch_localonly'}]").' ';
}
+
if (ref($changes{'cansearch'}) eq 'ARRAY') {
my $chgtext;
if (ref($usertypes) eq 'HASH') {
@@ -9239,12 +9294,8 @@ sub modify_directorysrch {
$resulttext .= ''.&mt($title{'searchtypes'}.' set to: "[_1]"',$chgtext).' ';
}
$resulttext .= ' ';
- &Apache::lonnet::do_cache_new('directorysrch',$dom,$dirsrch_hash{'directorysrch'},3600);
- if (ref($lastactref) eq 'HASH') {
- $lastactref->{'directorysrch'} = 1;
- }
} else {
- $resulttext = &mt('No changes made to directory search settings');
+ $resulttext = &mt('No changes made to institution directory search settings');
}
} else {
$resulttext = ''.
@@ -9261,12 +9312,11 @@ sub modify_contacts {
$currsetting{$key} = $domconfig{'contacts'}{$key};
}
}
- my (%others,%to,%bcc,%includestr,%includeloc);
+ my (%others,%to,%bcc);
my @contacts = ('supportemail','adminemail');
- my @mailings = ('errormail','packagesmail','helpdeskmail','otherdomsmail',
- 'lonstatusmail','requestsmail','updatesmail','idconflictsmail');
+ my @mailings = ('errormail','packagesmail','helpdeskmail','lonstatusmail',
+ 'requestsmail','updatesmail','idconflictsmail');
my @toggles = ('reporterrors','reportupdates');
- my ($fields,$fieldtitles,$fieldoptions,$possoptions) = &helpform_fields();
foreach my $type (@mailings) {
@{$newsetting{$type}} =
&Apache::loncommon::get_env_multiple('form.'.$type);
@@ -9276,17 +9326,12 @@ sub modify_contacts {
} else {
$contacts_hash{contacts}{$type}{$item} = 0;
}
- }
+ }
$others{$type} = $env{'form.'.$type.'_others'};
$contacts_hash{contacts}{$type}{'others'} = $others{$type};
- if (($type eq 'helpdeskmail') || ($type eq 'otherdomsmail')) {
+ if ($type eq 'helpdeskmail') {
$bcc{$type} = $env{'form.'.$type.'_bcc'};
$contacts_hash{contacts}{$type}{'bcc'} = $bcc{$type};
- if (($env{'form.'.$type.'_includestr'} ne '') && ($env{'form.'.$type.'_includeloc'} =~ /^s|b$/)) {
- $includestr{$type} = $env{'form.'.$type.'_includestr'};
- $includeloc{$type} = $env{'form.'.$type.'_includeloc'};
- $contacts_hash{contacts}{$type}{'include'} = $includeloc{$type}.':'.&escape($includestr{$type});
- }
}
}
foreach my $item (@contacts) {
@@ -9298,23 +9343,6 @@ sub modify_contacts {
$contacts_hash{'contacts'}{$item} = $env{'form.'.$item};
}
}
- if ((ref($fields) eq 'ARRAY') && (ref($possoptions) eq 'HASH')) {
- foreach my $field (@{$fields}) {
- if (ref($possoptions->{$field}) eq 'ARRAY') {
- my $value = $env{'form.helpform_'.$field};
- $value =~ s/^\s+|\s+$//g;
- if (grep(/^\Q$value\E$/,@{$possoptions->{$field}})) {
- $contacts_hash{contacts}{'helpform'}{$field} = $value;
- if ($field eq 'screenshot') {
- $env{'form.helpform_maxsize'} =~ s/^\s+|\s+$//g;
- if ($env{'form.helpform_maxsize'} =~ /^\d+\.?\d*$/) {
- $contacts_hash{contacts}{'helpform'}{'maxsize'} = $env{'form.helpform_maxsize'};
- }
- }
- }
- }
- }
- }
if (keys(%currsetting) > 0) {
foreach my $item (@contacts) {
if ($to{$item} ne $currsetting{$item}) {
@@ -9334,39 +9362,10 @@ sub modify_contacts {
if ($others{$type} ne $currsetting{$type}{'others'}) {
push(@{$changes{$type}},'others');
}
- if (($type eq 'helpdeskmail') || ($type eq 'otherdomsmail')) {
+ if ($type eq 'helpdeskmail') {
if ($bcc{$type} ne $currsetting{$type}{'bcc'}) {
push(@{$changes{$type}},'bcc');
}
- my ($currloc,$currstr) = split(/:/,$currsetting{$type}{'include'},2);
- if (($includeloc{$type} ne $currloc) || (&escape($includestr{$type}) ne $currstr)) {
- push(@{$changes{$type}},'include');
- }
- }
- }
- if (ref($fields) eq 'ARRAY') {
- if (ref($currsetting{'helpform'}) eq 'HASH') {
- foreach my $field (@{$fields}) {
- if ($currsetting{'helpform'}{$field} ne $contacts_hash{'contacts'}{'helpform'}{$field}) {
- push(@{$changes{'helpform'}},$field);
- }
- if (($field eq 'screenshot') && ($contacts_hash{'contacts'}{'helpform'}{'screenshot'} ne 'no')) {
- if ($currsetting{'helpform'}{'maxsize'} ne $contacts_hash{'contacts'}{'helpform'}{'maxsize'}) {
- push(@{$changes{'helpform'}},'maxsize');
- }
- }
- }
- } else {
- foreach my $field (@{$fields}) {
- if ($contacts_hash{'contacts'}{'helpform'}{$field} ne 'yes') {
- push(@{$changes{'helpform'}},$field);
- }
- if (($field eq 'screenshot') && ($contacts_hash{'contacts'}{'helpform'}{'screenshot'} ne 'no')) {
- if ($contacts_hash{'contacts'}{'helpform'}{'maxsize'} != 1) {
- push(@{$changes{'helpform'}},'maxsize');
- }
- }
- }
}
}
} else {
@@ -9376,41 +9375,26 @@ sub modify_contacts {
$default{'errormail'} = 'adminemail';
$default{'packagesmail'} = 'adminemail';
$default{'helpdeskmail'} = 'supportemail';
- $default{'otherdomsmail'} = 'supportemail';
$default{'lonstatusmail'} = 'adminemail';
$default{'requestsmail'} = 'adminemail';
$default{'updatesmail'} = 'adminemail';
foreach my $item (@contacts) {
if ($to{$item} ne $default{$item}) {
- $changes{$item} = 1;
+ $changes{$item} = 1;
}
}
foreach my $type (@mailings) {
if ((@{$newsetting{$type}} != 1) || ($newsetting{$type}[0] ne $default{$type})) {
+
push(@{$changes{$type}},@{$newsetting{$type}});
}
if ($others{$type} ne '') {
push(@{$changes{$type}},'others');
}
- if (($type eq 'helpdeskmail') || ($type eq 'otherdomsmail')) {
+ if ($type eq 'helpdeskmail') {
if ($bcc{$type} ne '') {
push(@{$changes{$type}},'bcc');
}
- if (($includeloc{$type} =~ /^b|s$/) && ($includestr{$type} ne '')) {
- push(@{$changes{$type}},'include');
- }
- }
- }
- if (ref($fields) eq 'ARRAY') {
- foreach my $field (@{$fields}) {
- if ($contacts_hash{'contacts'}{'helpform'}{$field} ne 'yes') {
- push(@{$changes{'helpform'}},$field);
- }
- if (($field eq 'screenshot') && ($contacts_hash{'contacts'}{'helpform'}{'screenshot'} ne 'no')) {
- if ($contacts_hash{'contacts'}{'helpform'}{'maxsize'} != 1) {
- push(@{$changes{'helpform'}},'maxsize');
- }
- }
}
}
}
@@ -9442,11 +9426,7 @@ sub modify_contacts {
}
foreach my $type (@mailings) {
if (ref($changes{$type}) eq 'ARRAY') {
- if (($type eq 'helpdeskmail') || ($type eq 'otherdomsmail')) {
- $resulttext .= ''.$titles->{$type}.' -- '.&mt('sent to').': ';
- } else {
- $resulttext .= ' '.$titles->{$type}.': ';
- }
+ $resulttext .= ' '.$titles->{$type}.': ';
my @text;
foreach my $item (@{$newsetting{$type}}) {
push(@text,$short_titles->{$item});
@@ -9454,31 +9434,12 @@ sub modify_contacts {
if ($others{$type} ne '') {
push(@text,$others{$type});
}
- if (@text) {
- $resulttext .= ''.
- join(', ',@text).' ';
- }
- if (($type eq 'helpdeskmail') || ($type eq 'otherdomsmail')) {
+ $resulttext .= ''.
+ join(', ',@text).' ';
+ if ($type eq 'helpdeskmail') {
if ($bcc{$type} ne '') {
- my $bcctext;
- if (@text) {
- $bcctext = ' '.&mt('with Bcc to');
- } else {
- $bcctext = '(Bcc)';
- }
- $resulttext .= $bcctext.': '.$bcc{$type}.' ';
- } elsif (!@text) {
- $resulttext .= &mt('No one');
- }
- if ($includestr{$type} ne '') {
- if ($includeloc{$type} eq 'b') {
- $resulttext .= ' '.&mt('Text automatically added to e-mail body:').' '.$includestr{$type};
- } elsif ($includeloc{$type} eq 's') {
- $resulttext .= ' '.&mt('Text automatically added to e-mail subject:').' '.$includestr{$type};
- }
+ $resulttext .= ' '.&mt('with Bcc to').': '.$bcc{$type}.' ';
}
- } elsif (!@text) {
- $resulttext .= &mt('No recipients');
}
$resulttext .= ' ';
}
@@ -9500,50 +9461,9 @@ sub modify_contacts {
&mt('LON-CAPA core group - MSU'),600,500)).
'';
}
- if ((ref($changes{'helpform'}) eq 'ARRAY') && (ref($fields) eq 'ARRAY')) {
- my (@optional,@required,@unused,$maxsizechg);
- foreach my $field (@{$changes{'helpform'}}) {
- if ($field eq 'maxsize') {
- $maxsizechg = 1;
- next;
- }
- if ($contacts_hash{'contacts'}{'helpform'}{$field} eq 'yes') {
- push(@optional,$field);
- } elsif ($contacts_hash{'contacts'}{'helpform'}{$field} eq 'no') {
- push(@unused,$field);
- } elsif ($contacts_hash{'contacts'}{'helpform'}{$field} eq 'req') {
- push(@required,$field);
- }
- }
- if (@optional) {
- $resulttext .= ''.
- &mt('Help form fields changed to "Optional": [_1].',
- ''.join(', ',map { $fieldtitles->{$_}; } @optional)).' '.
- ' ';
- }
- if (@required) {
- $resulttext .= ''.
- &mt('Help form fields changed to "Required": [_1].',
- ''.join(', ',map { $fieldtitles->{$_}; } @required)).' '.
- ' ';
- }
- if (@unused) {
- $resulttext .= ''.
- &mt('Help form fields changed to "Not shown": [_1].',
- ''.join(', ',map { $fieldtitles->{$_}; } @unused)).' '.
- ' ';
- }
- if ($maxsizechg) {
- $resulttext .= ''.
- &mt('Max size for file uploaded to help form by logged-in user set to [_1] MB.',
- $contacts_hash{'contacts'}{'helpform'}{'maxsize'}).
- ' ';
-
- }
- }
$resulttext .= '';
} else {
- $resulttext = &mt('No changes made to contacts and form settings');
+ $resulttext = &mt('No changes made to contact information');
}
} else {
$resulttext = ''.
@@ -9562,8 +9482,7 @@ sub modify_usercreation {
if (ref($domconfig{'usercreation'}{$key}) eq 'HASH') {
foreach my $item (keys(%{$domconfig{'usercreation'}{$key}})) {
if (($item eq 'selfcreate') || ($item eq 'statustocreate') ||
- ($item eq 'captcha') || ($item eq 'recaptchakeys') ||
- ($item eq 'recaptchaversion')) {
+ ($item eq 'captcha') || ($item eq 'recaptchakeys')) {
$save_usercreate{$key}{$item} = $domconfig{'usercreation'}{$key}{$item};
} else {
$curr_usercreation{$key}{$item} = $domconfig{'usercreation'}{$key}{$item};
@@ -9787,7 +9706,6 @@ sub modify_selfcreation {
foreach my $item (keys(%{$domconfig{'usercreation'}{$key}})) {
if (($item eq 'selfcreate') || ($item eq 'statustocreate') ||
($item eq 'captcha') || ($item eq 'recaptchakeys') ||
- ($item eq 'recaptchaversion') ||
($item eq 'emailusername') || ($item eq 'notify') ||
($item eq 'selfcreateprocessing') || ($item eq 'shibenv')) {
$curr_usercreation{$key}{$item} = $domconfig{'usercreation'}{$key}{$item};
@@ -10117,7 +10035,6 @@ sub modify_selfcreation {
#
$save_usercreate{'cancreate'}{'captcha'} = $savecaptcha{'captcha'};
$save_usercreate{'cancreate'}{'recaptchakeys'} = $savecaptcha{'recaptchakeys'};
- $save_usercreate{'cancreate'}{'recaptchaversion'} = $savecaptcha{'recaptchaversion'};
$save_usercreate{'cancreate'}{'selfcreate'} = $cancreate{'selfcreate'};
if (ref($cancreate{'notify'}) eq 'HASH') {
$save_usercreate{'cancreate'}{'notify'} = $cancreate{'notify'};
@@ -10132,7 +10049,7 @@ sub modify_selfcreation {
$save_usercreate{'cancreate'}{'shibenv'} = $cancreate{'shibenv'};
}
$save_usercreate{'cancreate'}{'emailusername'} = $cancreate{'emailusername'};
- $save_usercreate{'email_rule'} = \@email_rule;
+ $save_usercreate{'emailrule'} = \@email_rule;
my %userconfig_hash = (
usercreation => \%save_usercreate,
@@ -10279,10 +10196,6 @@ sub modify_selfcreation {
$chgtext .= ''.&mt('Private key set to [_1]',$pubkey).' ';
}
$chgtext .= '';
- } elsif ($type eq 'recaptchaversion') {
- if ($savecaptcha{'captcha'} eq 'recaptcha') {
- $chgtext .= &mt('ReCAPTCHA set to version [_1]',$savecaptcha{$type});
- }
} elsif ($type eq 'emailusername') {
if (ref($cancreate{'emailusername'}) eq 'HASH') {
if (ref($types) eq 'ARRAY') {
@@ -10403,7 +10316,7 @@ sub process_captcha {
$changes->{'captcha'} = 1;
}
}
- my ($newpub,$newpriv,$currpub,$currpriv,$newversion,$currversion);
+ my ($newpub,$newpriv,$currpub,$currpriv);
if ($newsettings->{'captcha'} eq 'recaptcha') {
$newpub = $env{'form.'.$container.'_recaptchapub'};
$newpriv = $env{'form.'.$container.'_recaptchapriv'};
@@ -10413,12 +10326,6 @@ sub process_captcha {
public => $newpub,
private => $newpriv,
};
- $newversion = $env{'form.'.$container.'_recaptchaversion'};
- $newversion =~ s/\D//g;
- if ($newversion ne '2') {
- $newversion = 1;
- }
- $newsettings->{'recaptchaversion'} = $newversion;
}
if (ref($current->{'recaptchakeys'}) eq 'HASH') {
$currpub = $current->{'recaptchakeys'}{'public'};
@@ -10430,23 +10337,6 @@ sub process_captcha {
}
}
}
- if ($current->{'captcha'} eq 'recaptcha') {
- $currversion = $current->{'recaptchaversion'};
- if ($currversion ne '2') {
- $currversion = 1;
- }
- }
- if ($currversion ne $newversion) {
- if ($container eq 'cancreate') {
- if (ref($changes->{'cancreate'}) eq 'ARRAY') {
- push(@{$changes->{'cancreate'}},'recaptchaversion');
- } elsif (!defined($changes->{'cancreate'})) {
- $changes->{'cancreate'} = ['recaptchaversion'];
- }
- } else {
- $changes->{'recaptchaversion'} = 1;
- }
- }
if (($newpub ne $currpub) || ($newpriv ne $currpriv)) {
if ($container eq 'cancreate') {
if (ref($changes->{'cancreate'}) eq 'ARRAY') {
@@ -10568,8 +10458,7 @@ sub modify_defaults {
my ($dom,$lastactref,%domconfig) = @_;
my ($resulttext,$mailmsgtxt,%newvalues,%changes,@errors);
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1);
- my @items = ('auth_def','auth_arg_def','lang_def','timezone_def','datelocale_def',
- 'portal_def','intauth_cost','intauth_check','intauth_switch');
+ my @items = ('auth_def','auth_arg_def','lang_def','timezone_def','datelocale_def','portal_def');
my @authtypes = ('internal','krb4','krb5','localauth');
foreach my $item (@items) {
$newvalues{$item} = $env{'form.'.$item};
@@ -10611,24 +10500,6 @@ sub modify_defaults {
push(@errors,$item);
}
}
- } elsif ($item eq 'intauth_cost') {
- if ($newvalues{$item} ne '') {
- if ($newvalues{$item} =~ /\D/) {
- push(@errors,$item);
- }
- }
- } elsif ($item eq 'intauth_check') {
- if ($newvalues{$item} ne '') {
- unless ($newvalues{$item} =~ /^(0|1|2)$/) {
- push(@errors,$item);
- }
- }
- } elsif ($item eq 'intauth_switch') {
- if ($newvalues{$item} ne '') {
- unless ($newvalues{$item} =~ /^(0|1|2)$/) {
- push(@errors,$item);
- }
- }
}
if (grep(/^\Q$item\E$/,@errors)) {
$newvalues{$item} = $domdefaults{$item};
@@ -10783,28 +10654,6 @@ sub modify_defaults {
localauth => 'loc',
);
$value = $authnames{$shortauth{$value}};
- } elsif ($item eq 'intauth_switch') {
- my %optiondesc = &Apache::lonlocal::texthash (
- 0 => 'No',
- 1 => 'Yes',
- 2 => 'Yes, and copy existing passwd file to passwd.bak file',
- );
- if ($value =~ /^(0|1|2)$/) {
- $value = $optiondesc{$value};
- } else {
- $value = &mt('none -- defaults to No');
- }
- } elsif ($item eq 'intauth_check') {
- my %optiondesc = &Apache::lonlocal::texthash (
- 0 => 'No',
- 1 => 'Yes, allow login then update passwd file using default cost (if higher)',
- 2 => 'Yes, disallow login if stored cost is less than domain default',
- );
- if ($value =~ /^(0|1|2)$/) {
- $value = $optiondesc{$value};
- } else {
- $value = &mt('none -- defaults to No');
- }
}
$resulttext .= ''.&mt('[_1] set to "[_2]"',$title->{$item},$value).' ';
$mailmsgtext .= "$title->{$item} set to $value\n";
@@ -11320,210 +11169,32 @@ sub modify_serverstatuses {
}
sub modify_helpsettings {
- my ($r,$dom,$confname,$lastactref,%domconfig) = @_;
+ my ($r,$dom,$confname,%domconfig) = @_;
my ($resulttext,$errors,%changes,%helphash);
my %defaultchecked = ('submitbugs' => 'on');
my @offon = ('off','on');
my @toggles = ('submitbugs');
- my %current = ('submitbugs' => '',
- 'adhoc' => {},
- );
if (ref($domconfig{'helpsettings'}) eq 'HASH') {
- %current = %{$domconfig{'helpsettings'}};
- }
- my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1);
- foreach my $item (@toggles) {
- if ($defaultchecked{$item} eq 'on') {
- if ($current{$item} eq '') {
- if ($env{'form.'.$item} eq '0') {
- $changes{$item} = 1;
- }
- } elsif ($current{$item} ne $env{'form.'.$item}) {
- $changes{$item} = 1;
- }
- } elsif ($defaultchecked{$item} eq 'off') {
- if ($current{$item} eq '') {
- if ($env{'form.'.$item} eq '1') {
- $changes{$item} = 1;
- }
- } elsif ($current{$item} ne $env{'form.'.$item}) {
- $changes{$item} = 1;
- }
- }
- if (($env{'form.'.$item} eq '0') || ($env{'form.'.$item} eq '1')) {
- $helphash{'helpsettings'}{$item} = $env{'form.'.$item};
- }
- }
- my $maxnum = $env{'form.helproles_maxnum'};
- my $confname = $dom.'-domainconfig';
- my %existing=&Apache::lonnet::dump('roles',$dom,$confname,'rolesdef_');
- my (@allpos,%newsettings,%changedprivs,$newrole);
- my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
- my @accesstypes = ('all','dh','da','none','status','inc','exc');
- my %domhelpdesk = &Apache::lonnet::get_active_domroles($dom,['dh','da']);
- my %lt = &Apache::lonlocal::texthash(
- s => 'system',
- d => 'domain',
- order => 'Display order',
- access => 'Role usage',
- all => 'All with domain helpdesk or helpdesk assistant role',
- dh => 'All with domain helpdesk role',
- da => 'All with domain helpdesk assistant role',
- none => 'None',
- status => 'Determined based on institutional status',
- inc => 'Include all, but exclude specific personnel',
- exc => 'Exclude all, but include specific personnel',
- );
- for (my $num=0; $num<=$maxnum; $num++) {
- my ($prefix,$identifier,$rolename,%curr);
- if ($num == $maxnum) {
- next unless ($env{'form.newcusthelp'} == $maxnum);
- $identifier = 'custhelp'.$num;
- $prefix = 'helproles_'.$num;
- $rolename = $env{'form.custhelpname'.$num};
- $rolename=~s/[^A-Za-z0-9]//gs;
- next if ($rolename eq '');
- next if (exists($existing{'rolesdef_'.$rolename}));
- my %newprivs = &Apache::lonuserutils::custom_role_update($rolename,$identifier);
- my $result = &Apache::lonnet::definerole($rolename,$newprivs{'s'},$newprivs{'d'},
- $newprivs{'c'},$confname,$dom);
- if ($result ne 'ok') {
- $errors .= ''.
- &mt('An error occurred storing the new custom role: [_1]',
- $result).' ';
- next;
- } else {
- $changedprivs{$rolename} = \%newprivs;
- $newrole = $rolename;
- }
- } else {
- $prefix = 'helproles_'.$num;
- $rolename = $env{'form.'.$prefix};
- next if ($rolename eq '');
- next unless (exists($existing{'rolesdef_'.$rolename}));
- $identifier = 'custhelp'.$num;
- my %newprivs = &Apache::lonuserutils::custom_role_update($rolename,$identifier);
- my %currprivs;
- ($currprivs{'s'},$currprivs{'d'},$currprivs{'c'}) =
- split(/\_/,$existing{'rolesdef_'.$rolename});
- foreach my $level ('c','d','s') {
- if ($newprivs{$level} ne $currprivs{$level}) {
- my $result = &Apache::lonnet::definerole($rolename,$newprivs{'s'},$newprivs{'d'},
- $newprivs{'c'},$confname,$dom);
- if ($result ne 'ok') {
- $errors .= ''.
- &mt('An error occurred storing privileges for existing role [_1]: [_2]',
- $rolename,$result).' ';
- } else {
- $changedprivs{$rolename} = \%newprivs;
- }
- last;
- }
- }
- if (ref($current{'adhoc'}) eq 'HASH') {
- if (ref($current{'adhoc'}{$rolename}) eq 'HASH') {
- %curr = %{$current{'adhoc'}{$rolename}};
- }
- }
- }
- my $newpos = $env{'form.'.$prefix.'_pos'};
- $newpos =~ s/\D+//g;
- $allpos[$newpos] = $rolename;
- my $newdesc = $env{'form.'.$prefix.'_desc'};
- $helphash{'helpsettings'}{'adhoc'}{$rolename}{'desc'} = $newdesc;
- if ($curr{'desc'}) {
- if ($curr{'desc'} ne $newdesc) {
- $changes{'customrole'}{$rolename}{'desc'} = 1;
- $newsettings{$rolename}{'desc'} = $newdesc;
- }
- } elsif ($newdesc ne '') {
- $changes{'customrole'}{$rolename}{'desc'} = 1;
- $newsettings{$rolename}{'desc'} = $newdesc;
- }
- my $access = $env{'form.'.$prefix.'_access'};
- if (grep(/^\Q$access\E$/,@accesstypes)) {
- $helphash{'helpsettings'}{'adhoc'}{$rolename}{'access'} = $access;
- if ($access eq 'status') {
- my @statuses = &Apache::loncommon::get_env_multiple('form.'.$prefix.'_status');
- if (scalar(@statuses) == 0) {
- $helphash{'helpsettings'}{'adhoc'}{$rolename}{'access'} = 'none';
- } else {
- my (@shownstatus,$numtypes);
- $helphash{'helpsettings'}{'adhoc'}{$rolename}{$access} = [];
- if (ref($types) eq 'ARRAY') {
- $numtypes = scalar(@{$types});
- foreach my $type (sort(@statuses)) {
- if ($type eq 'default') {
- push(@{$helphash{'helpsettings'}{'adhoc'}{$rolename}{$access}},$type);
- } elsif (grep(/^\Q$type\E$/,@{$types})) {
- push(@{$helphash{'helpsettings'}{'adhoc'}{$rolename}{$access}},$type);
- push(@shownstatus,$usertypes->{$type});
- }
- }
- }
- if (grep(/^default$/,@statuses)) {
- push(@shownstatus,$othertitle);
- }
- if (scalar(@shownstatus) == 1+$numtypes) {
- $helphash{'helpsettings'}{'adhoc'}{$rolename}{'access'} = 'all';
- delete($helphash{'helpsettings'}{'adhoc'}{$rolename}{'status'});
- } else {
- $newsettings{$rolename}{'status'} = join(' '.&mt('or').' ',@shownstatus);
- if (ref($curr{'status'}) eq 'ARRAY') {
- my @diffs = &Apache::loncommon::compare_arrays($helphash{'helpsettings'}{'adhoc'}{$rolename}{$access},$curr{$access});
- if (@diffs) {
- $changes{'customrole'}{$rolename}{$access} = 1;
- }
- } elsif (@{$helphash{'helpsettings'}{'adhoc'}{$rolename}{$access}}) {
- $changes{'customrole'}{$rolename}{$access} = 1;
- }
- }
- }
- } elsif (($access eq 'inc') || ($access eq 'exc')) {
- my @personnel = &Apache::loncommon::get_env_multiple('form.'.$prefix.'_staff_'.$access);
- my @newspecstaff;
- $helphash{'helpsettings'}{'adhoc'}{$rolename}{$access} = [];
- foreach my $person (sort(@personnel)) {
- if ($domhelpdesk{$person}) {
- push(@{$helphash{'helpsettings'}{'adhoc'}{$rolename}{$access}},$person);
+ foreach my $item (@toggles) {
+ if ($defaultchecked{$item} eq 'on') {
+ if ($domconfig{'helpsettings'}{$item} eq '') {
+ if ($env{'form.'.$item} eq '0') {
+ $changes{$item} = 1;
}
+ } elsif ($domconfig{'helpsettings'}{$item} ne $env{'form.'.$item}) {
+ $changes{$item} = 1;
}
- if (ref($curr{$access}) eq 'ARRAY') {
- my @diffs = &Apache::loncommon::compare_arrays($helphash{'helpsettings'}{'adhoc'}{$rolename}{$access},$curr{$access});
- if (@diffs) {
- $changes{'customrole'}{$rolename}{$access} = 1;
+ } elsif ($defaultchecked{$item} eq 'off') {
+ if ($domconfig{'helpsettings'}{$item} eq '') {
+ if ($env{'form.'.$item} eq '1') {
+ $changes{$item} = 1;
}
- } elsif (@{$helphash{'helpsettings'}{'adhoc'}{$rolename}{$access}}) {
- $changes{'customrole'}{$rolename}{$access} = 1;
- }
- foreach my $person (@{$helphash{'helpsettings'}{'adhoc'}{$rolename}{$access}}) {
- my ($uname,$udom) = split(/:/,$person);
- push(@newspecstaff,&Apache::loncommon::aboutmewrapper(&Apache::loncommon::plainname($uname,$udom,'lastname'),$uname,$udom));
+ } elsif ($domconfig{'helpsettings'}{$item} ne $env{'form.'.$item}) {
+ $changes{$item} = 1;
}
- $newsettings{$rolename}{$access} = join(', ',sort(@newspecstaff));
}
- } else {
- $helphash{'helpsettings'}{'adhoc'}{$rolename}{'access'}= 'all';
- }
- unless ($curr{'access'} eq $access) {
- $changes{'customrole'}{$rolename}{'access'} = 1;
- $newsettings{$rolename}{'access'} = $lt{$helphash{'helpsettings'}{'adhoc'}{$rolename}{'access'}};
- }
- }
- if (@allpos > 0) {
- my $idx = 0;
- foreach my $rolename (@allpos) {
- if ($rolename ne '') {
- $helphash{'helpsettings'}{'adhoc'}{$rolename}{'order'} = $idx;
- if (ref($current{'adhoc'}) eq 'HASH') {
- if (ref($current{'adhoc'}{$rolename}) eq 'HASH') {
- if ($current{'adhoc'}{$rolename}{'order'} ne $idx) {
- $changes{'customrole'}{$rolename}{'order'} = 1;
- $newsettings{$rolename}{'order'} = $idx+1;
- }
- }
- }
- $idx ++;
+ if (($env{'form.'.$item} eq '0') || ($env{'form.'.$item} eq '1')) {
+ $helphash{'helpsettings'}{$item} = $env{'form.'.$item};
}
}
}
@@ -11531,115 +11202,25 @@ sub modify_helpsettings {
if (keys(%changes) > 0) {
$putresult = &Apache::lonnet::put_dom('configuration',\%helphash,$dom);
if ($putresult eq 'ok') {
- if (ref($helphash{'helpsettings'}) eq 'HASH') {
- $domdefaults{'submitbugs'} = $helphash{'helpsettings'}{'submitbugs'};
- if (ref($helphash{'helpsettings'}{'adhoc'}) eq 'HASH') {
- $domdefaults{'adhocroles'} = $helphash{'helpsettings'}{'adhoc'};
- }
- }
- my $cachetime = 24*60*60;
- &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime);
- if (ref($lastactref) eq 'HASH') {
- $lastactref->{'domdefaults'} = 1;
- }
- } else {
- $errors .= ''.
- &mt('An error occurred storing the settings: [_1]',
- $putresult).' ';
- }
- }
- if ((keys(%changes) && ($putresult eq 'ok')) || (keys(%changedprivs))) {
- $resulttext = &mt('Changes made:').'';
- my (%shownprivs,@levelorder);
- @levelorder = ('c','d','s');
- if ((keys(%changes)) && ($putresult eq 'ok')) {
+ $resulttext = &mt('Changes made:').'';
foreach my $item (sort(keys(%changes))) {
if ($item eq 'submitbugs') {
$resulttext .= ''.&mt('Display link to: [_1] set to "'.$offon[$env{'form.'.$item}].'".',
&Apache::loncommon::modal_link('http://bugs.loncapa.org',
&mt('LON-CAPA bug tracker'),600,500)).' ';
- } elsif ($item eq 'customrole') {
- if (ref($changes{'customrole'}) eq 'HASH') {
- my @keyorder = ('order','desc','access','status','exc','inc');
- my %keytext = &Apache::lonlocal::texthash(
- order => 'Order',
- desc => 'Role description',
- access => 'Role usage',
- status => 'Allowed institutional types',
- exc => 'Allowed personnel',
- inc => 'Disallowed personnel',
- );
- foreach my $role (sort(keys(%{$changes{'customrole'}}))) {
- if (ref($changes{'customrole'}{$role}) eq 'HASH') {
- if ($role eq $newrole) {
- $resulttext .= ''.&mt('New custom role added: [_1]',
- $role).'';
- } else {
- $resulttext .= ''.&mt('Existing custom role modified: [_1]',
- $role).'';
- }
- foreach my $key (@keyorder) {
- if ($changes{'customrole'}{$role}{$key}) {
- $resulttext .= ''.&mt("[_1] set to: [_2]",
- $keytext{$key},$newsettings{$role}{$key}).
- ' ';
- }
- }
- if (ref($changedprivs{$role}) eq 'HASH') {
- $shownprivs{$role} = 1;
- $resulttext .= ''.&mt('Privileges set to :').'';
- foreach my $level (@levelorder) {
- foreach my $item (split(/\:/,$changedprivs{$role}{$level})) {
- next if ($item eq '');
- my ($priv) = split(/\&/,$item,2);
- if (&Apache::lonnet::plaintext($priv)) {
- $resulttext .= ''.&Apache::lonnet::plaintext($priv);
- unless ($level eq 'c') {
- $resulttext .= ' ('.$lt{$level}.')';
- }
- $resulttext .= ' ';
- }
- }
- }
- $resulttext .= ' ';
- }
- $resulttext .= ' ';
- }
- }
- }
- }
- }
- }
- if (keys(%changedprivs)) {
- foreach my $role (sort(keys(%changedprivs))) {
- unless ($shownprivs{$role}) {
- $resulttext .= ''.&mt('Existing custom role modified: [_1]',
- $role).''.
- ''.&mt('Privileges set to :').'';
- foreach my $level (@levelorder) {
- foreach my $item (split(/\:/,$changedprivs{$role}{$level})) {
- next if ($item eq '');
- my ($priv) = split(/\&/,$item,2);
- if (&Apache::lonnet::plaintext($priv)) {
- $resulttext .= ''.&Apache::lonnet::plaintext($priv);
- unless ($level eq 'c') {
- $resulttext .= ' ('.$lt{$level}.')';
- }
- $resulttext .= ' ';
- }
- }
- }
- $resulttext .= ' ';
}
}
+ $resulttext .= ' ';
+ } else {
+ $resulttext = &mt('No changes made to help settings');
+ $errors .= ' '.
+ &mt('An error occurred storing the settings: [_1]',
+ $putresult).' ';
}
- $resulttext .= ' ';
- } else {
- $resulttext = &mt('No changes made to help settings');
}
if ($errors) {
$resulttext .= ' '.&mt('The following errors occurred: ').'';
+ $errors.' ';
}
return $resulttext;
}
@@ -11648,19 +11229,18 @@ sub modify_coursedefaults {
my ($dom,$lastactref,%domconfig) = @_;
my ($resulttext,$errors,%changes,%defaultshash);
my %defaultchecked = (
+ 'canuse_pdfforms' => 'off',
'uselcmath' => 'on',
'usejsme' => 'on'
);
- my @toggles = ('uselcmath','usejsme');
+ my @toggles = ('canuse_pdfforms','uselcmath','usejsme');
my @numbers = ('anonsurvey_threshold','uploadquota_official','uploadquota_unofficial',
- 'uploadquota_community','uploadquota_textbook','mysqltables_official',
- 'mysqltables_unofficial','mysqltables_community','mysqltables_textbook');
+ 'uploadquota_community','uploadquota_textbook');
my @types = ('official','unofficial','community','textbook');
my %staticdefaults = (
anonsurvey_threshold => 10,
uploadquota => 500,
postsubmit => 60,
- mysqltables => 172800,
);
$defaultshash{'coursedefaults'} = {};
@@ -11701,12 +11281,12 @@ sub modify_coursedefaults {
}
$defaultshash{'coursedefaults'}{$item} = $newdef;
} else {
- my ($setting,$type) = ($item =~ /^(uploadquota|mysqltables)_(\w+)$/);
- if (ref($domconfig{'coursedefaults'}{$setting}) eq 'HASH') {
- $currdef = $domconfig{'coursedefaults'}{$setting}{$type};
+ my ($type) = ($item =~ /^\Quploadquota_\E(\w+)$/);
+ if (ref($domconfig{'coursedefaults'}{'uploadquota'}) eq 'HASH') {
+ $currdef = $domconfig{'coursedefaults'}{'uploadquota'}{$type};
}
$newdef =~ s/[^\w.\-]//g;
- $defaultshash{'coursedefaults'}{$setting}{$type} = $newdef;
+ $defaultshash{'coursedefaults'}{'uploadquota'}{$type} = $newdef;
}
if ($currdef ne $newdef) {
my $staticdef;
@@ -11714,10 +11294,9 @@ sub modify_coursedefaults {
unless (($currdef eq '') && ($newdef == $staticdefaults{$item})) {
$changes{$item} = 1;
}
- } elsif ($item =~ /^(uploadquota|mysqltables)_/) {
- my $setting = $1;
- unless (($currdef eq '') && ($newdef == $staticdefaults{$setting})) {
- $changes{$setting} = 1;
+ } else {
+ unless (($currdef eq '') && ($newdef == $staticdefaults{'uploadquota'})) {
+ $changes{'uploadquota'} = 1;
}
}
}
@@ -11730,7 +11309,7 @@ sub modify_coursedefaults {
}
}
my $newclone;
- if ($env{'form.canclone'} =~ /^(none|domain|instcode)$/) {
+ if ($env{'form.canclone'} =~ /^(none|domain|instcode)$/) {
$newclone = $env{'form.canclone'};
}
if ($newclone eq 'instcode') {
@@ -11753,8 +11332,8 @@ sub modify_coursedefaults {
$newclone eq '';
}
} elsif ($newclone ne '') {
- $defaultshash{'coursedefaults'}{'canclone'} = $newclone;
- }
+ $defaultshash{'coursedefaults'}{'canclone'} = $newclone;
+ }
if ($newclone ne $currclone) {
$changes{'canclone'} = 1;
}
@@ -11772,10 +11351,10 @@ sub modify_coursedefaults {
$defaultshash{'coursedefaults'}{'coursecredits'}{$type} = $credits{$type};
}
} else {
- if ($env{'form.coursecredits'} eq '1') {
+ if ($env{'form.coursecredits'} eq '1') {
foreach my $type (@types) {
unless ($type eq 'community') {
- if ($domconfig{'coursedefaults'}{'coursecredits'}{$type} ne $credits{$type}) {
+ if ($domconfig{'coursedefaults'}{'coursecredits'}{$type} ne $credits{$type}) {
$changes{'coursecredits'} = 1;
}
$defaultshash{'coursedefaults'}{'coursecredits'}{$type} = $credits{$type};
@@ -11818,7 +11397,7 @@ sub modify_coursedefaults {
}
if (exists($currtimeout{$type})) {
if ($timeout ne $currtimeout{$type}) {
- $changes{'postsubmit'} = 1;
+ $changes{'postsubmit'} = 1;
}
} elsif ($timeout ne '') {
$changes{'postsubmit'} = 1;
@@ -11840,14 +11419,14 @@ sub modify_coursedefaults {
if ($putresult eq 'ok') {
if (keys(%changes) > 0) {
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1);
- if (($changes{'uploadquota'}) || ($changes{'postsubmit'}) ||
+ if (($changes{'canuse_pdfforms'}) || ($changes{'uploadquota'}) || ($changes{'postsubmit'}) ||
($changes{'coursecredits'}) || ($changes{'uselcmath'}) || ($changes{'usejsme'}) ||
- ($changes{'canclone'}) || ($changes{'mysqltables'})) {
- foreach my $item ('uselcmath','usejsme') {
+ ($changes{'canclone'})) {
+ foreach my $item ('canuse_pdfforms','uselcmath','usejsme') {
if ($changes{$item}) {
$domdefaults{$item}=$defaultshash{'coursedefaults'}{$item};
}
- }
+ }
if ($changes{'coursecredits'}) {
if (ref($defaultshash{'coursedefaults'}{'coursecredits'}) eq 'HASH') {
foreach my $type (keys(%{$defaultshash{'coursedefaults'}{'coursecredits'}})) {
@@ -11894,7 +11473,13 @@ sub modify_coursedefaults {
}
$resulttext = &mt('Changes made:').'';
foreach my $item (sort(keys(%changes))) {
- if ($item eq 'uselcmath') {
+ if ($item eq 'canuse_pdfforms') {
+ if ($env{'form.'.$item} eq '1') {
+ $resulttext .= ''.&mt("Course/Community users can create/upload PDF forms set to 'on'").' ';
+ } else {
+ $resulttext .= ''.&mt('Course/Community users can create/upload PDF forms set to "off"').' ';
+ }
+ } elsif ($item eq 'uselcmath') {
if ($env{'form.'.$item} eq '1') {
$resulttext .= ''.&mt('Math preview uses LON-CAPA previewer (javascript), if supported by browser.').' ';
} else {
@@ -11904,7 +11489,7 @@ sub modify_coursedefaults {
if ($env{'form.'.$item} eq '1') {
$resulttext .= ''.&mt('Molecule editor uses JSME (HTML5), if supported by browser.').' ';
} else {
- $resulttext .= ''.&mt('Molecule editor uses JME (Java), if supported by client OS.').' ';
+ $resulttext .= ''.&mt('Molecule editor uses JME (Java), if supported by client OS.').' ';
}
} elsif ($item eq 'anonsurvey_threshold') {
$resulttext .= ''.&mt('Responder count required for display of anonymous survey submissions set to [_1].',$defaultshash{'coursedefaults'}{'anonsurvey_threshold'}).' ';
@@ -11921,24 +11506,12 @@ sub modify_coursedefaults {
} else {
$resulttext .= ''.&mt('Default quota for content uploaded via Course Editor remains default: [_1] MB',$staticdefaults{'uploadquota'}).' ';
}
- } elsif ($item eq 'mysqltables') {
- if (ref($defaultshash{'coursedefaults'}{'mysqltables'}) eq 'HASH') {
- $resulttext .= ''.&mt('Lifetime of "Temporary" MySQL tables (student performance data) on homeserver').''.
- ''.&mt('Official courses: [_1] s',''.$defaultshash{'coursedefaults'}{'mysqltables'}{'official'}.' ').' '.
- ''.&mt('Unofficial courses: [_1] s',''.$defaultshash{'coursedefaults'}{'mysqltables'}{'unofficial'}.' ').' '.
- ''.&mt('Textbook courses: [_1] s',''.$defaultshash{'coursedefaults'}{'mysqltables'}{'textbook'}.' ').' '.
- ''.&mt('Communities: [_1] s',''.$defaultshash{'coursedefaults'}{'mysqltables'}{'community'}.' ').' '.
- ' '.
- ' ';
- } else {
- $resulttext .= ''.&mt('Lifetime of "Temporary" MySQL tables (student performance data) on homeserver remains default: [_1] s',$staticdefaults{'uploadquota'}).' ';
- }
} elsif ($item eq 'postsubmit') {
if ($domdefaults{'postsubmit'} eq 'off') {
$resulttext .= ''.&mt('Submit button(s) remain enabled on page after student makes submission.');
} else {
$resulttext .= ' '.&mt('Submit button(s) disabled on page after student makes submission').'; ';
- if (ref($defaultshash{'coursedefaults'}{'postsubmit'}) eq 'HASH') {
+ if (ref($defaultshash{'coursedefaults'}{'postsubmit'}) eq 'HASH') {
$resulttext .= &mt('durations:').'';
foreach my $type (@types) {
$resulttext .= '';
@@ -11967,7 +11540,7 @@ sub modify_coursedefaults {
}
$resulttext .= ' ';
}
- $resulttext .= ' ';
+ $resulttext .= '';
}
} elsif ($item eq 'coursecredits') {
if (ref($defaultshash{'coursedefaults'}{'coursecredits'}) eq 'HASH') {
@@ -11995,7 +11568,7 @@ sub modify_coursedefaults {
} elsif ($defaultshash{'coursedefaults'}{'canclone'} eq 'domain') {
$resulttext .= ''.&mt('By default, a course requester can clone any course from his/her domain.').' ';
} else {
- $resulttext .= ''.&mt('By default, only course owner and coordinators may clone a course.').' ';
+ $resulttext .= ''.&mt('By default, only course owner and coordinators may clone a course.').' ';
}
}
}
@@ -12450,7 +12023,7 @@ sub modify_usersessions {
}
}
unless ($changes{'offloadnow'}) {
- foreach my $lonhost (keys(%{$defaultshash{'usersessions'}{'offloadnow'}})) {
+ foreach my $lonhost (keys(%{$defaultshash{'usersessions'}{'offloadnow'}})) {
unless ($domconfig{'usersessions'}{'offloadnow'}{$lonhost}) {
$changes{'offloadnow'} = 1;
last;
@@ -12481,10 +12054,8 @@ sub modify_usersessions {
}
my $cachetime = 24*60*60;
&Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime);
- &Apache::lonnet::do_cache_new('usersessions',$dom,$defaultshash{'usersessions'},3600);
if (ref($lastactref) eq 'HASH') {
$lastactref->{'domdefaults'} = 1;
- $lastactref->{'usersessions'} = 1;
}
if (keys(%changes) > 0) {
my %lt = &usersession_titles();
@@ -12637,13 +12208,8 @@ sub modify_loadbalancing {
push(@offloadto,$target);
}
}
+ $defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype} = \@offloadto;
}
- if ($env{'form.loadbalancing_target_'.$i.'_hosthere'} eq $sparetype) {
- unless(grep(/^\Q$balancer\E$/,@offloadto)) {
- push(@offloadto,$balancer);
- }
- }
- $defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype} = \@offloadto;
}
if (ref($currtargets{$balancer}) eq 'HASH') {
foreach my $sparetype (@sparestypes) {
@@ -12682,7 +12248,7 @@ sub modify_loadbalancing {
}
if ($rule eq 'specific') {
my $specifiedhost = $env{'form.loadbalancing_singleserver_'.$i.'_'.$type};
- if (exists($servers{$specifiedhost})) {
+ if (exists($servers{$specifiedhost})) {
$rule = $specifiedhost;
}
}
@@ -12758,7 +12324,7 @@ sub modify_loadbalancing {
if ($rule eq '') {
$balancetext = $ruletitles{'default'};
} elsif (($rule eq 'homeserver') || ($rule eq 'externalbalancer') ||
- ($type eq '_LC_ipchange') || ($type eq '_LC_ipchangesso')) {
+ ($type eq '_LC_ipchange') || ($type eq '_LC_ipchangesso')) {
if (($type eq '_LC_ipchange') || ($type eq '_LC_ipchangesso')) {
foreach my $sparetype (@sparestypes) {
if (ref($defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}) eq 'ARRAY') {
@@ -12877,9 +12443,24 @@ sub recurse_cat_deletes {
return;
}
+sub get_active_dcs {
+ my ($dom) = @_;
+ my $now = time;
+ my %dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc'],$now,$now);
+ my %domcoords;
+ my $numdcs = 0;
+ foreach my $server (keys(%dompersonnel)) {
+ foreach my $user (sort(keys(%{$dompersonnel{$server}}))) {
+ my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,$user);
+ $domcoords{$uname.':'.$udom} = $dompersonnel{$server}{$user};
+ }
+ }
+ return %domcoords;
+}
+
sub active_dc_picker {
my ($dom,$numinrow,$inputtype,$name,%currhash) = @_;
- my %domcoords = &Apache::lonnet::get_active_domroles($dom,['dc']);
+ my %domcoords = &get_active_dcs($dom);
my @domcoord = keys(%domcoords);
if (keys(%currhash)) {
foreach my $dc (keys(%currhash)) {
@@ -13443,8 +13024,6 @@ function updateCaptcha(caller,context) {
var pubitem;
var privtext;
var pubtext;
- var versionitem;
- var versiontext;
if (document.getElementById(context+'_recaptchapub')) {
pubitem = document.getElementById(context+'_recaptchapub');
} else {
@@ -13465,16 +13044,6 @@ function updateCaptcha(caller,context) {
} else {
return;
}
- if (document.getElementById(context+'_recaptchaversion')) {
- versionitem = document.getElementById(context+'_recaptchaversion');
- } else {
- return;
- }
- if (document.getElementById(context+'_recaptchavertxt')) {
- versiontext = document.getElementById(context+'_recaptchavertxt');
- } else {
- return;
- }
if (caller.checked) {
if (caller.value == 'recaptcha') {
pubitem.type = 'text';
@@ -13483,16 +13052,11 @@ function updateCaptcha(caller,context) {
privitem.size = '40';
pubtext.innerHTML = "$lt{'pub'}";
privtext.innerHTML = "$lt{'priv'}";
- versionitem.type = 'text';
- versionitem.size = '3';
- versiontext.innerHTML = "$lt{'ver'}";
} else {
pubitem.type = 'hidden';
privitem.type = 'hidden';
- versionitem.type = 'hidden';
pubtext.innerHTML = '';
privtext.innerHTML = '';
- versiontext.innerHTML = '';
}
}
return;
@@ -13558,7 +13122,6 @@ sub captcha_phrases {
original => 'original (CAPTCHA)',
recaptcha => 'successor (ReCAPTCHA)',
notused => 'unused',
- ver => 'ReCAPTCHA version (1 or 2)',
);
}
@@ -13568,7 +13131,7 @@ sub devalidate_remote_domconfs {
my %servers = &Apache::lonnet::internet_dom_servers($dom);
my %thismachine;
map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids();
- my @posscached = ('domainconfig','domdefaults','usersessions','directorysrch');
+ my @posscached = ('domainconfig','domdefaults','ltitools');
if (keys(%servers)) {
foreach my $server (keys(%servers)) {
next if ($thismachine{$server});