--- loncom/interface/domainprefs.pm 2017/10/15 18:51:15 1.160.6.84.2.4 +++ loncom/interface/domainprefs.pm 2015/06/15 20:11:56 1.266 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set domain-wide configuration settings # -# $Id: domainprefs.pm,v 1.160.6.84.2.4 2017/10/15 18:51:15 raeburn Exp $ +# $Id: domainprefs.pm,v 1.266 2015/06/15 20:11:56 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -19,15 +19,14 @@ # # 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/ # # ############################################################### -############################################################### +############################################################## =pod @@ -216,27 +215,13 @@ sub handler { 'contacts','defaults','scantron','coursecategories', 'serverstatuses','requestcourses','helpsettings', 'coursedefaults','usersessions','loadbalancing', - 'requestauthor','selfenrollment','inststatus', - 'ltitools'],$dom); - if (ref($domconfig{'ltitools'}) eq 'HASH') { - my %encconfig = - &Apache::lonnet::get_dom('encconfig',['ltitools'],$dom); - if (ref($encconfig{'ltitools'}) eq 'HASH') { - foreach my $id (keys(%{$domconfig{'ltitools'}})) { - if (ref($domconfig{'ltitools'}{$id}) eq 'HASH') { - foreach my $item ('key','secret') { - $domconfig{'ltitools'}{$id}{$item} = $encconfig{'ltitools'}{$id}{$item}; - } - } - } - } - } + 'requestauthor','selfenrollment','inststatus'],$dom); my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll', 'autoupdate','autocreate','directorysrch','contacts', 'usercreation','selfcreation','usermodification','scantron', 'requestcourses','requestauthor','coursecategories', - 'serverstatuses','helpsettings','coursedefaults', - 'ltitools','selfenrollment','usersessions'); + 'serverstatuses','helpsettings', + 'coursedefaults','selfenrollment','usersessions'); my %existing; if (ref($domconfig{'loadbalancing'}) eq 'HASH') { %existing = %{$domconfig{'loadbalancing'}}; @@ -276,8 +261,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, @@ -321,24 +304,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, }, @@ -435,12 +412,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, }, @@ -466,6 +441,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', @@ -478,7 +461,7 @@ sub handler { print => \&print_usersessions, modify => \&modify_usersessions, }, - 'loadbalancing' => + 'loadbalancing' => {text => 'Dedicated Load Balancer(s)', help => 'Domain_Configuration_Load_Balancing', header => [{col1 => 'Balancers', @@ -489,14 +472,6 @@ 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', @@ -550,9 +525,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. @@ -642,7 +614,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') { @@ -664,7 +636,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') { @@ -673,8 +645,6 @@ 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; } @@ -687,22 +657,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 .= ' @@ -720,7 +674,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"'; } @@ -738,8 +691,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); @@ -769,8 +721,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"'; @@ -795,8 +746,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) { @@ -909,7 +859,7 @@ sub print_config_box { '. - ''."\n"; - $itemcount ++; - } $$rowtotal += $itemcount; return $datatable; @@ -4887,7 +3660,7 @@ sub spares_row { '. &mt('[_1] when busy, offloads to:' ,''.$server.'').'
'. - ''."\n". + ''."\n". ''. "\n"; @@ -5094,9 +3867,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++) { @@ -5142,23 +3912,6 @@ sub print_loadbalancing { $datatable .= ''.$typetitles{$sparetype}.'
'. '
'; - if ($action eq 'login') { + if (($action eq 'login') || ($action eq 'directorysrch')) { $output .= ' '; } elsif ($action eq 'serverstatuses') { @@ -953,12 +903,13 @@ 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') || - ($action eq 'ltitools')) { + } elsif (($action eq 'autoenroll') || ($action eq 'autocreate') || ($action eq 'directorysrch') || + ($action eq 'contacts') || ($action eq 'serverstatuses') || ($action eq 'loadbalancing')) { $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 .= ' @@ -2462,78 +2413,10 @@ $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') { @@ -2567,9 +2450,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" '; @@ -2605,12 +2485,8 @@ sub print_autoenroll { $coownerson.' value="1" />'.&mt('Yes').' '. ''. - ''. - ''. - ''; - $$rowtotal += 4; + ''; + $$rowtotal += 3; return $datatable; } @@ -2658,7 +2534,7 @@ sub print_autoupdate { my $locknamesettings; $datatable .= &insttypes_row($settings,$types,$usertypes, $dom,$numinrow,$othertitle, - 'lockablenames',$rowtotal); + 'lockablenames'); $$rowtotal ++; } else { my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); @@ -2739,944 +2615,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=''. - ''. - ''. - ''. - ''. - ''. - ''; - $$rowtotal += 2; - if (ref($usertypes) eq 'HASH') { - if (keys(%{$usertypes}) > 0) { - $datatable .= &insttypes_row($settings,$types,$usertypes,$dom, - $numinrow,$othertitle,'cansearch', - $rowtotal); - $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=''. + ''. + ''. + ''. + ''. + ''. + ''; + $$rowtotal += 2; + if (ref($usertypes) eq 'HASH') { + if (keys(%{$usertypes}) > 0) { + $datatable .= &insttypes_row($settings,$types,$usertypes,$dom, + $numinrow,$othertitle,'cansearch'); + $cansrchrow = 1; } - $datatable .= ''; + $$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=''. - ''. - ''. - ''. - ''. - ''. - ''; - $$rowtotal += 2; + $datatable .= ''; } + $datatable .= ''. + ''; + $$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 .= ''. - ''; - $rownum ++; - } - } elsif ($position eq 'bottom') { + foreach my $item (@contacts) { + $css_class = $rownum%2?' class="LC_odd_row"':''; + $datatable .= ''. + ''; + $rownum ++; + } + foreach my $type (@mailings) { $css_class = $rownum%2?' class="LC_odd_row"':''; $datatable .= ''. - ''. + ''."\n"; $rownum ++; } - unless ($position eq 'top') { - foreach my $type (@mailings) { - $css_class = $rownum%2?' class="LC_odd_row"':''; - $datatable .= ''. - ''. - ''."\n"; - $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') { - my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); - my (@posstypes,%usertypeshash); - if (ref($types) eq 'ARRAY') { - @posstypes = @{$types}; - } - if (@posstypes) { - if (ref($usertypes) eq 'HASH') { - %usertypeshash = %{$usertypes}; - } - my @overridden; - my $numinrow = 4; - if (ref($settings) eq 'HASH') { - if (ref($settings->{'overrides'}) eq 'HASH') { - foreach my $key (sort(keys(%{$settings->{'overrides'}}))) { - if (ref($settings->{'overrides'}{$key}) eq 'HASH') { - push(@overridden,$key); - foreach my $item (@contacts) { - if ($settings->{'overrides'}{$key}{$item}) { - $checked{'override_'.$key}{$item} = ' checked="checked" '; - } - } - $otheremails{'override_'.$key} = $settings->{'overrides'}{$key}{'others'}; - $bccemails{'override_'.$key} = $settings->{'overrides'}{$key}{'bcc'}; - $includeloc{'override_'.$key} = ''; - $includestr{'override_'.$key} = ''; - if ($settings->{'overrides'}{$key}{'include'} ne '') { - ($includeloc{'override_'.$key},$includestr{'override_'.$key}) = - split(/:/,$settings->{'overrides'}{$key}{'include'},2); - $includestr{'override_'.$key} = &unescape($includestr{'override_'.$key}); - } - } - } - } - } - my $customclass = 'LC_helpdesk_override'; - my $optionsprefix = 'LC_options_helpdesk_'; - - my $onclicktypes = "toggleHelpdeskRow(this.form,'overrides','$customclass','$optionsprefix');"; - - $datatable .= &insttypes_row($settings,$types,$usertypes,$dom, - $numinrow,$othertitle,'overrides', - \$rownum,$onclicktypes,$customclass); - $rownum ++; - $usertypeshash{'default'} = $othertitle; - foreach my $status (@posstypes) { - my $css_class; - if ($rownum%2) { - $css_class = 'LC_odd_row '; - } - $css_class .= $customclass; - my $rowid = $optionsprefix.$status; - my $hidden = 1; - my $currstyle = 'display:none'; - if (grep(/^\Q$status\E$/,@overridden)) { - $currstyle = 'display:table-row'; - $hidden = 0; - } - my $key = 'override_'.$status; - $datatable .= &overridden_helpdesk($checked{$key},$otheremails{$key},$bccemails{$key}, - $includeloc{$key},$includestr{$key},$status,$rowid, - $usertypeshash{$status},$css_class,$currstyle, - \@contacts,$short_titles); - unless ($hidden) { - $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 overridden_helpdesk { - my ($checked,$otheremails,$bccemails,$includeloc,$includestr,$type,$rowid, - $typetitle,$css_class,$rowstyle,$contacts,$short_titles) = @_; - my $class = 'LC_left_item'; - if ($css_class) { - $css_class = ' class="'.$css_class.'"'; - } - if ($rowid) { - $rowid = ' id="'.$rowid.'"'; - } - if ($rowstyle) { - $rowstyle = ' style="'.$rowstyle.'"'; - } - my ($output,$description); - $description = &mt('Helpdesk requests from: [_1] in this domain (overrides default)',"$typetitle"); - $output = ''. - "\n". - ''."\n"; - return $output; -} - -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 .= ''. - ''; - $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 .= ''. - ''; - $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 .= '

'; - 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 { @@ -3721,7 +2884,7 @@ sub radiobutton_prefs { } else { $datatable .= ''. - ''."\n"; - $itemcount ++; - } - } - $css_class = $itemcount%2?' class="LC_odd_row"':''; - my $chgstr = ' onchange="javascript:reorderLTI(this.form,'."'ltitools_add_pos'".');"'; - $datatable .= ''."\n". - ''."\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' => 'Tab', - 'iframe' => 'iFrame', - 'height' => 'Height', - 'width' => 'Width', - 'linktext' => 'Default Link Text', - 'explanation' => 'Default Explanation', - 'passback' => 'Tool can return grades:', - 'roster' => 'Tool can retrieve roster:', - 'crstarget' => 'Display target', - 'crslabel' => 'Course label', - 'crstitle' => 'Course title', - 'crslinktext' => 'Link Text', - 'crsexplanation' => 'Explanation', - ); - - 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"':''; @@ -4165,7 +2961,7 @@ sub print_coursedefaults { $currcanclone = $settings->{'canclone'}; } } - } + } foreach my $option (@cloneoptions) { my ($checked,$additional); if ($currcanclone eq $option) { @@ -4204,7 +3000,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'); @@ -4234,7 +3030,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'}; } @@ -4248,15 +3044,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'}; @@ -4334,27 +3121,13 @@ sub print_coursedefaults { $additional .= '
'.&mt($item->{'header'}->[0]->{'col1'}).'
'.&mt('Failsafe for no drops when institutional data missing').''. - '
'.&mt('Institutional directory search available?').' '. - '
'.&mt('Other domains can search institution?').' '. - '
'.&mt('Directory search available?').' '. + '
'.&mt('Other domains can search?').' '. + '
'.&mt('Supported search methods'). - ''; - foreach my $title (@{$titleorder}) { - if (defined($searchtitles->{$title})) { - my $check = ' '; - if (ref($settings) eq 'HASH') { - if (ref($settings->{'searchby'}) eq 'ARRAY') { - if (grep(/^\Q$title\E$/,@{$settings->{'searchby'}})) { - $check = ' checked="checked" '; - } + } + if ($cansrchrow) { + $$rowtotal ++; + $datatable .= ''; + } else { + $datatable .= ''; + } + $datatable .= ''; - $$rowtotal ++; - if ($cansrchrow) { - $datatable .= ''; - } else { - $datatable .= ''; - } - $datatable .= ''. - ''; - $$rowtotal ++; + } + $datatable .= '
'.&mt('Supported search methods'). + ''; + foreach my $title (@{$titleorder}) { + if (defined($searchtitles->{$title})) { + my $check = ' '; + if (ref($settings) eq 'HASH') { + if (ref($settings->{'searchby'}) eq 'ARRAY') { + if (grep(/^\Q$title\E$/,@{$settings->{'searchby'}})) { + $check = ' checked="checked" '; } } - $datatable .= ''; } + $datatable .= ''; } - $datatable .= '
'. - ''. + '
'.&mt('Search latitude').''. - ' '. - ' '. - '
'.&mt('LON-CAPA directory search available?').' '. - '
'.&mt('Other domains can search LON-CAPA domain?').' '. - '
'.&mt('Search latitude').''. + ' '. + ' '. + '
'.$titles->{$item}. - ''. - '
'.$titles->{$item}. + ''. + '
'.&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 .= ''; - foreach my $field (@{$fields}) { - $datatable .= ''. - ''; - } - $datatable .= '
'.&mt('Field').''.&mt('Status').'
'.$fieldtitles->{$field}; - if (($field eq 'screenshot') || ($field eq 'cc')) { - $datatable .= ' '.&mt('(logged-in users)'); - } - $datatable .=''; - my $clickaction; - if ($field eq 'screenshot') { - $clickaction = ' onclick="screenshotSize(this);"'; - } - if (ref($possoptions->{$field}) eq 'ARRAY') { - foreach my $option (@{$possoptions->{$field}}) { - my $checked; - if ($currfield{$field} eq $option) { - $checked = ' checked="checked"'; - } - $datatable .= ''.(' 'x2); - } - } - if ($field eq 'screenshot') { - my $display; - if ($currfield{$field} eq 'no') { - $display = ' style="display:none"'; - } - $datatable .= '
'.&mt('Maximum size for upload (MB)').''. - ''; - } - $datatable .= '
'; + '
'. + $titles->{$type}.': '. + ''; + foreach my $item (@contacts) { + $datatable .= ' '; + } + $datatable .= '
'.&mt('Others').':  '. + ''; + if ($type eq 'helpdeskmail') { + $datatable .= '
'.&mt('Bcc:').(' 'x6). + ''; } $datatable .= '
'. - $titles->{$type}.': '; - if (($type eq 'helpdeskmail') || ($type eq 'otherdomsmail')) { - $datatable .= '
'.&mt('E-mail recipient(s)').''; - } - $datatable .= ''; - foreach my $item (@contacts) { - $datatable .= ' '; - } - $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:').' '. - ''. - (' 'x2). - ''. - '
'; - } - $datatable .= '
$description'. - '
'.&mt('E-mail recipient(s)').''. - ''; - if (ref($contacts) eq 'ARRAY') { - foreach my $item (@{$contacts}) { - my $check; - if (ref($checked) eq 'HASH') { - $check = $checked->{$item}; - } - my $title; - if (ref($short_titles) eq 'HASH') { - $title = $short_titles->{$item}; - } - $output .= ' '; - } - } - $output .= '
'.&mt('Others').':  '. - ''; - my %locchecked; - foreach my $loc ('s','b') { - if ($includeloc eq $loc) { - $locchecked{$loc} = ' checked="checked"'; - last; - } - } - $output .= '
'.&mt('Bcc:').(' 'x6). - '
'. - '
'.&mt('Optional added text').''. - &mt('Text automatically added to e-mail:').' '. - '
'. - ''.&mt('Location:').' '. - ''. - (' 'x2). - ''. - '
'. - '
'.$role.'
'. - ''.(' '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'). - '
'.&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). - '
'; } - $datatable .= + $datatable .= ''. '
' - .''.(' 'x2). - ''. - '
'.&mt('Required settings').''. - ''.$lt{'title'}.': '. - (' 'x2). - ''.$lt{'version'}.': '. - (' 'x2). - ''.$lt{'msgtype'}.': '. - '

'. - ''.$lt{'url'}.':'. - (' 'x2). - ''.$lt{'key'}. - ' '. - (' 'x2). - ''.$lt{'secret'}.':'. - ''. - ''. - ''. - '
'. - '
'.&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"'; - } elsif ($settings->{$item}->{'display'}->{'target'} eq 'tab') { - $currdisp{'tab'} = ' 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; - } - $currdisp{'linktext'} = $settings->{$item}->{'display'}->{'linktext'}; - $currdisp{'explanation'} = $settings->{$item}->{'display'}->{'explanation'}; - } else { - $currdisp{'iframe'} = ' checked="checked"'; - } - foreach my $disp ('iframe','tab','window') { - $datatable .= ''.(' 'x2); - } - $datatable .= (' 'x4); - foreach my $dimen ('width','height') { - $datatable .= ''. - (' 'x2); - } - $datatable .= '
'. - '
'.$lt{'linktext'}.'
'. - '
'. - '
'.$lt{'explanation'}.'
'. - '

'; - $datatable .= '
'; - foreach my $extra ('passback','roster') { - my $checkedon = ''; - my $checkedoff = ' checked="checked"'; - if ($settings->{$item}->{$extra}) { - $checkedon = $checkedoff; - $checkedoff = ''; - } - $datatable .= $lt{$extra}.' '. - ''.(' 'x2). - ''.(' 'x4); - } - $datatable .= '

'.$lt{'icon'}.': '; - if ($imgsrc) { - $datatable .= $imgsrc. - ' '. - ' '.&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 .= ''.(' ' x2); - } - $datatable .= '
'. - '
'.&mt('Role mapping').''; - foreach my $role (@courseroles) { - my ($selected,$selectnone); - if (!$rolemaps{$role}) { - $selectnone = ' selected="selected"'; - } - $datatable .= ''; - } - $datatable .= '
'. - &Apache::lonnet::plaintext($role,'Course').'
'. - '
'; - my %courseconfig; - if (ref($settings->{$item}) eq 'HASH') { - if (ref($settings->{$item}->{'crsconf'}) eq 'HASH') { - %courseconfig = %{$settings->{$item}->{'crsconf'}}; - } - } - $datatable .= '
'.&mt('Configurable in course').''; - foreach my $item ('label','title','target','linktext','explanation') { - my $checked; - if ($courseconfig{$item}) { - $checked = ' checked="checked"'; - } - $datatable .= ''.(' ' x2)."\n"; - } - $datatable .= '
'. - '
'.&mt('Custom items sent on launch').''. - ''; - if (ref($settings->{$item}->{'custom'}) eq 'HASH') { - my %custom = %{$settings->{$item}->{'custom'}}; - if (keys(%custom) > 0) { - foreach my $key (sort(keys(%custom))) { - $datatable .= ''. - ''; - } - } - } - $datatable .= ''; - $datatable .= '
'.&mt('Action').''.&mt('Name').''.&mt('Value').'
'. - ''.$key.'
'. - ''. - '
'."\n". - ''."\n". - ' '."\n". - ''.&mt('Add').''. - '
'.&mt('Required settings').''. - ''.$lt{'title'}.': '."\n". - (' 'x2). - ''.$lt{'version'}.': '."\n". - (' 'x2). - ''.$lt{'msgtype'}.': '. - '
'. - ''.$lt{'url'}.': '."\n". - (' 'x2). - ''.$lt{'key'}.': '."\n". - (' 'x2). - ''.$lt{'secret'}.':'. - ' '."\n". - '
'. - '
'.&mt('Optional settings').''. - ''.&mt('Display target:'); - my %defaultdisp; - $defaultdisp{'iframe'} = ' checked="checked"'; - foreach my $disp ('iframe','tab','window') { - $datatable .= ''.(' 'x2); - } - $datatable .= (' 'x4); - foreach my $dimen ('width','height') { - $datatable .= ''. - (' 'x2); - } - $datatable .= '
'. - '
'.$lt{'linktext'}.'
'. - '
'. - '
'.$lt{'explanation'}.'
'. - ''. - '

'; - foreach my $extra ('passback','roster') { - $datatable .= $lt{$extra}.' '. - ''.(' 'x2). - ''.(' '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 .= ''.(' ' x2); - } - $datatable .= '
'. - '
'.&mt('Role mapping').''; - foreach my $role (@courseroles) { - my ($checked,$checkednone); - $datatable .= ''; - } - $datatable .= '
'. - &Apache::lonnet::plaintext($role,'Course').'
'. - '
'. - '
'.&mt('Configurable in course').''; - foreach my $item ('label','title','target','linktext','explanation') { - $datatable .= ''.(' ' x2)."\n"; - } - $datatable .= '
'. - '
'.&mt('Custom items sent on launch').''. - ''. - ''. - '
'.&mt('Action').''.&mt('Name').''.&mt('Value').'
'. - ''. - '
'."\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'}. - ''. - ''; - foreach my $type (@types) { - $datatable .= ''; - } - $datatable .= '
'.&mt($type).'
'. - '
'.$targettable.'

'; } - $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').'
'. - '
'; - foreach my $sparetype (@sparestypes) { - $datatable .= '
'; } $datatable .= ''. &loadbalancing_rules($dom,$intdom,$currrules{$lonhost}, @@ -5376,15 +4129,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 from all users in this domain", - 'otherdomsmail' => 'Helpdesk requests from users in 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 ( @@ -5394,34 +4146,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', @@ -5650,7 +4374,7 @@ sub print_selfcreation { if (keys(%{$usertypes}) > 0) { $datatable .= &insttypes_row($createsettings,$types,$usertypes, $dom,$numinrow,$othertitle, - 'statustocreate',$rowtotal); + 'statustocreate',$$rowtotal); $$rowtotal ++; } } @@ -5831,8 +4555,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') { @@ -5850,11 +4573,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'}; @@ -5888,11 +4606,7 @@ sub captcha_choice { $currpub.'" size="40" />
'."\n". ''.$privtext.' '."\n". '
'. - ''.$vertext.' '."\n". - '
'. - ''."\n". + $currpriv.'" size="40" />'."\n". ''; return $output; } @@ -6027,10 +4741,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'); @@ -6043,6 +4754,7 @@ sub print_defaults { $defaults{$item} = $domdefaults{$item}; } } + my $titles = &defaults_titles($dom); foreach my $item (@items) { if ($rownum%2) { $css_class = ''; @@ -6090,87 +4802,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 .= ''; - foreach my $option (@options) { - my $checked = ' '; - if ($defaults{$item} eq $option) { - $checked = ' checked="checked"'; - } - $datatable .= ''; - } - $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 .= ''; - foreach my $option (@options) { - my $checked = ' '; - my $onclick; - if ($defaults{$item} eq $option) { - $checked = ' checked="checked"'; - } - if ($option == 2) { - $onclick = ' onclick="javascript:warnIntAuth(this);"'; - } - $datatable .= ''; - } - $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')) { @@ -6265,9 +4898,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'); @@ -6771,35 +5401,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 '') { @@ -6853,14 +5455,10 @@ $jstext return; } -$intauthjs - // ]]> ENDSCRIPT - } else { - return &Apache::lonhtmlcommon::scripttag($intauthjs); } } @@ -7228,13 +5826,11 @@ sub modifiable_userdata_row { } sub insttypes_row { - my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle,$context,$rowtotal,$onclick, - $customcss,$rowstyle) = @_; + my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle,$context,$rownum) = @_; my %lt = &Apache::lonlocal::texthash ( cansearch => 'Users allowed to search', statustocreate => 'Institutional affiliation(s) able to create own account (login/SSO)', lockablenames => 'User preference to lock name', - overrides => "Override domain's helpdesk settings based on requester's affiliation", ); my $showdom; if ($context eq 'cansearch') { @@ -7244,22 +5840,9 @@ sub insttypes_row { if ($context eq 'statustocreate') { $class = 'LC_right_item'; } - my $css_class; - if ($$rowtotal%2) { - $css_class = 'LC_odd_row'; - } - if ($customcss) { - $css_class .= ' '.$customcss; - } - $css_class =~ s/^\s+//; - if ($css_class) { - $css_class = ' class="'.$css_class.'"'; - } - if ($rowstyle) { - $css_class .= ' style="'.$rowstyle.'"'; - } - if ($onclick) { - $onclick = 'onclick="'.$onclick.'" '; + my $css_class = ' class="LC_odd_row"'; + if ($rownum ne '') { + $css_class = ($rownum%2? ' class="LC_odd_row"':''); } my $output = ''. ''.$lt{$context}.$showdom. @@ -7281,10 +5864,6 @@ sub insttypes_row { if (grep(/^\Q$types->[$i]\E$/,@{$settings->{$context}})) { $check = ' checked="checked" '; } - } elsif (ref($settings->{$context}) eq 'HASH') { - if (ref($settings->{$context}->{$types->[$i]}) eq 'HASH') { - $check = ' checked="checked" '; - } } elsif ($context eq 'statustocreate') { $check = ' checked="checked" '; } @@ -7299,38 +5878,29 @@ sub insttypes_row { $rem = @{$types}%($numinrow); } my $colsleft = $numinrow - $rem; - if ($context eq 'overrides') { - if ($colsleft > 1) { - $output .= ''; - } else { - $output .= ''; - } - $output .= ' '; + if (($rem == 0) && (@{$types} > 0)) { + $output .= ''; + } + if ($colsleft > 1) { + $output .= ''; } else { - if (($rem == 0) && (@{$types} > 0)) { - $output .= ''; - } - if ($colsleft > 1) { - $output .= ''; - } else { - $output .= ''; - } - my $defcheck = ' '; - if (ref($settings) eq 'HASH') { - if (ref($settings->{$context}) eq 'ARRAY') { - if (grep(/^default$/,@{$settings->{$context}})) { - $defcheck = ' checked="checked" '; - } - } elsif ($context eq 'statustocreate') { + $output .= ''; + } + my $defcheck = ' '; + if (ref($settings) eq 'HASH') { + if (ref($settings->{$context}) eq 'ARRAY') { + if (grep(/^default$/,@{$settings->{$context}})) { $defcheck = ' checked="checked" '; } + } elsif ($context eq 'statustocreate') { + $defcheck = ' checked="checked" '; } - $output .= ''; } - $output .= ''; + $output .= ''. + ''; return $output; } @@ -7596,7 +6166,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'} } } } @@ -7615,7 +6185,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}) { @@ -7821,13 +6391,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}]").'
  • '; } @@ -7847,6 +6410,7 @@ sub modify_login { return $resulttext; } + sub check_exempt_addresses { my ($iplist) = @_; $iplist =~ s/^\s+//; @@ -8756,7 +7320,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}) { @@ -8901,7 +7465,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; } @@ -8925,7 +7489,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') { @@ -9328,589 +7892,6 @@ 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,%encconfig,$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}) { - if (($item eq 'key') || ($item eq 'secret')) { - $encconfig{$newid}{$item} = $env{'form.ltitools_add_'.$item}; - } else { - $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','linktext','explanation') { - $env{'form.ltitools_add_'.$item} =~ s/^\s+//; - $env{'form.ltitools_add_'.$item} =~ s/\s+$//; - if (($item eq 'width') || ($item eq 'height')) { - if ($env{'form.ltitools_add_'.$item} =~ /^\d+$/) { - $confhash{$newid}{'display'}{$item} = $env{'form.ltitools_add_'.$item}; - } - } else { - if ($env{'form.ltitools_add_'.$item} ne '') { - $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'}; - } elsif ($env{'form.ltitools_add_target'} eq 'tab') { - $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',$newid, - $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; - } - } - } - my @courseconfig = &Apache::loncommon::get_env_multiple('form.ltitools_courseconfig'); - foreach my $item (@courseconfig) { - $confhash{$newid}{'crsconf'}{$item} = 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') { - $confhash{$itemid}{$item} = $env{'form.ltitools_'.$item.'_'.$i}; - if ($domconfig{$action}{$itemid}{$item} ne $confhash{$itemid}{$item}) { - $changes{$itemid} = 1; - } - } - foreach my $item ('key','secret') { - $encconfig{$itemid}{$item} = $env{'form.ltitools_'.$item.'_'.$i}; - if ($domconfig{$action}{$itemid}{$item} ne $encconfig{$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; - } - } elsif (ref($domconfig{$action}{$itemid}{'display'}) eq 'HASH') { - if ($domconfig{$action}{$itemid}{'display'}{$size} ne '') { - $changes{$itemid} = 1; - } - } - } - foreach my $item ('linktext','explanation') { - $env{'form.ltitools_'.$item.'_'.$i} =~ s/^\s+//; - $env{'form.ltitools_'.$item.'_'.$i} =~ s/\s+$//; - if ($env{'form.ltitools_'.$item.'_'.$i} ne '') { - $confhash{$itemid}{'display'}{$item} = $env{'form.ltitools_'.$item.'_'.$i}; - if (ref($domconfig{$action}{$itemid}{'display'}) eq 'HASH') { - if ($domconfig{$action}{$itemid}{'display'}{$item} ne $confhash{$itemid}{'display'}{$item}) { - $changes{$itemid} = 1; - } - } else { - $changes{$itemid} = 1; - } - } elsif (ref($domconfig{$action}{$itemid}{'display'}) eq 'HASH') { - if ($domconfig{$action}{$itemid}{'display'}{$item} ne '') { - $changes{$itemid} = 1; - } - } - } - if ($env{'form.ltitools_target_'.$i} eq 'window') { - $confhash{$itemid}{'display'}{'target'} = $env{'form.ltitools_target_'.$i}; - } elsif ($env{'form.ltitools_target_'.$i} eq 'tab') { - $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 @courseconfig = &Apache::loncommon::get_env_multiple('form.ltitools_courseconfig_'.$i); - foreach my $item ('label','title','target','linktext','explanation') { - if (grep(/^\Q$item\E$/,@courseconfig)) { - $confhash{$itemid}{'crsconf'}{$item} = 1; - if (ref($domconfig{$action}{$itemid}{'crsconf'}) eq 'HASH') { - if ($domconfig{$action}{$itemid}{'crsconf'}{$item} ne $confhash{$itemid}{'crsconf'}{$item}) { - $changes{$itemid} = 1; - } - } else { - $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') { - my %ltienchash = ( - $action => { %encconfig } - ); - &Apache::lonnet::put_dom('encconfig',\%ltienchash,$dom); - if (keys(%changes) > 0) { - my $cachetime = 24*60*60; - my %ltiall = %confhash; - foreach my $id (keys(%ltiall)) { - if (ref($encconfig{$id}) eq 'HASH') { - foreach my $item ('key','secret') { - $ltiall{$id}{$item} = $encconfig{$id}{$item}; - } - } - } - &Apache::lonnet::do_cache_new('ltitools',$dom,\%ltiall,$cachetime); - if (ref($lastactref) eq 'HASH') { - $lastactref->{'ltitools'} = 1; - } - $resulttext = &mt('Changes made:').''; - } 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); @@ -9923,8 +7904,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'}; @@ -9934,17 +7914,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, @@ -9971,10 +7945,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:').''; } else { $resulttext = &mt('No changes made to auto-enrollment settings'); @@ -10220,7 +8180,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'} = ''; } @@ -10277,7 +8237,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') { @@ -10285,10 +8245,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'); @@ -10362,9 +8320,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, } @@ -10381,47 +8337,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:').''; - &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 = ''. @@ -10493,12 +8422,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); @@ -10508,17 +8436,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) { @@ -10530,63 +8453,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'}; - } - } - } - } - } - } - my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); - my (@statuses,%usertypeshash,@overrides); - if ((ref($types) eq 'ARRAY') && (@{$types} > 0)) { - @statuses = @{$types}; - if (ref($usertypes) eq 'HASH') { - %usertypeshash = %{$usertypes}; - } - } - if (@statuses) { - my @possoverrides = &Apache::loncommon::get_env_multiple('form.overrides'); - foreach my $type (@possoverrides) { - if (($type ne '') && (grep(/^\Q$type\E$/,@statuses))) { - push(@overrides,$type); - } - } - if (@overrides) { - foreach my $type (@overrides) { - my @standard = &Apache::loncommon::get_env_multiple('form.override_'.$type); - foreach my $item (@contacts) { - if (grep(/^\Q$item\E$/,@standard)) { - $contacts_hash{'contacts'}{'overrides'}{$type}{$item} = 1; - $newsetting{'override_'.$type}{$item} = 1; - } else { - $contacts_hash{'contacts'}{'overrides'}{$type}{$item} = 0; - $newsetting{'override_'.$type}{$item} = 0; - } - } - $contacts_hash{'contacts'}{'overrides'}{$type}{'others'} = $env{'form.override_'.$type.'_others'}; - $contacts_hash{'contacts'}{'overrides'}{$type}{'bcc'} = $env{'form.override_'.$type.'_bcc'}; - $newsetting{'override_'.$type}{'others'} = $env{'form.override_'.$type.'_others'}; - $newsetting{'override_'.$type}{'bcc'} = $env{'form.override_'.$type.'_bcc'}; - if (($env{'form.override_'.$type.'_includestr'} ne '') && ($env{'form.override_'.$type.'_includeloc'} =~ /^s|b$/)) { - $includestr{$type} = $env{'form.override_'.$type.'_includestr'}; - $includeloc{$type} = $env{'form.override_'.$type.'_includeloc'}; - $contacts_hash{'contacts'}{'overrides'}{$type}{'include'} = $includeloc{$type}.':'.&escape($includestr{$type}); - $newsetting{'override_'.$type}{'include'} = $contacts_hash{'contacts'}{'overrides'}{$type}{'include'}; - } - } - } - } if (keys(%currsetting) > 0) { foreach my $item (@contacts) { if ($to{$item} ne $currsetting{$item}) { @@ -10606,66 +8472,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'); - } - } - } - } - } - if (@statuses) { - if (ref($currsetting{'overrides'}) eq 'HASH') { - foreach my $key (keys(%{$currsetting{'overrides'}})) { - if (ref($currsetting{'overrides'}{$key}) eq 'HASH') { - if (ref($newsetting{'override_'.$key}) eq 'HASH') { - foreach my $item (@contacts,'bcc','others','include') { - if ($currsetting{'overrides'}{$key}{$item} ne $newsetting{'override_'.$key}{$item}) { - push(@{$changes{'overrides'}},$key); - last; - } - } - } else { - push(@{$changes{'overrides'}},$key); - } - } - } - foreach my $key (@overrides) { - unless (exists($currsetting{'overrides'}{$key})) { - push(@{$changes{'overrides'}},$key); - } - } - } else { - foreach my $key (@overrides) { - push(@{$changes{'overrides'}},$key); - } } } } else { @@ -10675,41 +8485,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'); - } - } } } } @@ -10741,11 +8536,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}); @@ -10753,89 +8544,16 @@ 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 .= '
  • '; } } - if (ref($changes{'overrides'}) eq 'ARRAY') { - my @deletions; - foreach my $type (@{$changes{'overrides'}}) { - if ($usertypeshash{$type}) { - if (grep(/^\Q$type\E/,@overrides)) { - $resulttext .= '
  • '.&mt("Overrides based on requester's affiliation set for [_1]", - $usertypeshash{$type}).'
    • '; - if (ref($newsetting{'override_'.$type}) eq 'HASH') { - my @text; - foreach my $item (@contacts) { - if ($newsetting{'override_'.$type}{$item}) { - push(@text,$short_titles->{$item}); - } - } - if ($newsetting{'override_'.$type}{'others'} ne '') { - push(@text,$newsetting{'override_'.$type}{'others'}); - } - - if (@text) { - $resulttext .= &mt('Helpdesk e-mail sent to: [_1]', - ''.join(', ',@text).''); - } - if ($newsetting{'override_'.$type}{'bcc'} ne '') { - my $bcctext; - if (@text) { - $bcctext = ' '.&mt('with Bcc to'); - } else { - $bcctext = '(Bcc)'; - } - $resulttext .= $bcctext.': '.$newsetting{'override_'.$type}{'bcc'}.''; - } elsif (!@text) { - $resulttext .= &mt('Helpdesk e-mail sent to no one'); - } - $resulttext .= '
    • '; - if ($newsetting{'override_'.$type}{'include'} ne '') { - my ($loc,$str) = split(/:/,$newsetting{'override_'.$type}{'include'}); - if ($loc eq 'b') { - $resulttext .= '
    • '.&mt('Text automatically added to e-mail body:').' '.&unescape($str).'
    • '; - } elsif ($loc eq 's') { - $resulttext .= '
    • '.&mt('Text automatically added to e-mail subject:').' '.&unescape($str).'
    • '; - } - } - } - $resulttext .= '
  • '; - } else { - push(@deletions,$usertypeshash{$type}); - } - } - } - if (@deletions) { - $resulttext .= '
  • '.&mt("Overrides based on requester's affiliation discontinued for: [_1]", - join(', ',@deletions)).'
  • '; - } - } my @offon = ('off','on'); if ($changes{'reporterrors'}) { $resulttext .= '
  • '. @@ -10853,49 +8571,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 = ''. @@ -10914,8 +8592,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}; @@ -11139,7 +8816,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}; @@ -11469,7 +9145,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'}; @@ -11484,7 +9159,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, @@ -11631,10 +9306,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') { @@ -11755,7 +9426,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'}; @@ -11765,12 +9436,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'}; @@ -11782,23 +9447,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') { @@ -11920,8 +9568,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}; @@ -11963,24 +9610,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}; @@ -12135,28 +9764,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"; @@ -12672,210 +10279,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}; } } } @@ -12883,115 +10312,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.'
      '; + $errors.'
    '; } return $resulttext; } @@ -13000,19 +10339,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'} = {}; @@ -13053,12 +10391,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; @@ -13066,10 +10404,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; } } } @@ -13082,7 +10419,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') { @@ -13105,8 +10442,8 @@ sub modify_coursedefaults { $newclone eq ''; } } elsif ($newclone ne '') { - $defaultshash{'coursedefaults'}{'canclone'} = $newclone; - } + $defaultshash{'coursedefaults'}{'canclone'} = $newclone; + } if ($newclone ne $currclone) { $changes{'canclone'} = 1; } @@ -13124,10 +10461,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}; @@ -13170,7 +10507,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; @@ -13192,14 +10529,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'}})) { @@ -13246,7 +10583,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 { @@ -13256,7 +10599,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'}).'
    • '; @@ -13273,24 +10616,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 .= '
      • '; @@ -13319,7 +10650,7 @@ sub modify_coursedefaults { } $resulttext .= '
      '; } - $resulttext .= '
    • '; + $resulttext .= ''; } } elsif ($item eq 'coursecredits') { if (ref($defaultshash{'coursedefaults'}{'coursecredits'}) eq 'HASH') { @@ -13347,7 +10678,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.').'
    • '; } } } @@ -13802,7 +11133,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; @@ -13833,10 +11164,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(); @@ -13989,13 +11318,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) { @@ -14034,7 +11358,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; } } @@ -14110,7 +11434,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') { @@ -14229,9 +11553,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)) { @@ -14795,8 +12134,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 { @@ -14817,16 +12154,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'; @@ -14835,16 +12162,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; @@ -14910,7 +12232,6 @@ sub captcha_phrases { original => 'original (CAPTCHA)', recaptcha => 'successor (ReCAPTCHA)', notused => 'unused', - ver => 'ReCAPTCHA version (1 or 2)', ); } @@ -14920,7 +12241,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','ltitools','usersessions','directorysrch'); + my @posscached = ('domainconfig','domdefaults'); if (keys(%servers)) { foreach my $server (keys(%servers)) { next if ($thismachine{$server});