version 1.354, 2019/04/22 01:55:17
|
version 1.369, 2020/02/05 23:46:01
|
Line 219 sub handler {
|
Line 219 sub handler {
|
'serverstatuses','requestcourses','helpsettings', |
'serverstatuses','requestcourses','helpsettings', |
'coursedefaults','usersessions','loadbalancing', |
'coursedefaults','usersessions','loadbalancing', |
'requestauthor','selfenrollment','inststatus', |
'requestauthor','selfenrollment','inststatus', |
'ltitools','ssl','trust','lti','passwords'],$dom); |
'ltitools','ssl','trust','lti','privacy','passwords'],$dom); |
my %encconfig = |
my %encconfig = |
&Apache::lonnet::get_dom('encconfig',['ltitools','lti'],$dom); |
&Apache::lonnet::get_dom('encconfig',['ltitools','lti'],$dom); |
if (ref($domconfig{'ltitools'}) eq 'HASH') { |
if (ref($domconfig{'ltitools'}) eq 'HASH') { |
Line 247 sub handler {
|
Line 247 sub handler {
|
} |
} |
} |
} |
my @prefs_order = ('rolecolors','login','defaults','passwords','quotas','autoenroll', |
my @prefs_order = ('rolecolors','login','defaults','passwords','quotas','autoenroll', |
'autoupdate','autocreate','directorysrch','contacts', |
'autoupdate','autocreate','directorysrch','contacts','privacy', |
'usercreation','selfcreation','usermodification','scantron', |
'usercreation','selfcreation','usermodification','scantron', |
'requestcourses','requestauthor','coursecategories', |
'requestcourses','requestauthor','coursecategories', |
'serverstatuses','helpsettings','coursedefaults', |
'serverstatuses','helpsettings','coursedefaults', |
Line 497 sub handler {
|
Line 497 sub handler {
|
modify => \&modify_selfenrollment, |
modify => \&modify_selfenrollment, |
}, |
}, |
'privacy' => |
'privacy' => |
{text => 'User Privacy', |
{text => 'Availability of User Information', |
help => 'Domain_Configuration_User_Privacy', |
help => 'Domain_Configuration_User_Privacy', |
header => [{col1 => 'Setting', |
header => [{col1 => 'Role assigned in different domain', |
col2 => 'Value',}], |
col2 => 'Approval options'}, |
|
{col1 => 'Role assigned in different domain to user of type', |
|
col2 => 'User information available in that domain'}, |
|
{col1 => "Role assigned in user's domain", |
|
col2 => 'Information viewable by privileged user'}, |
|
{col1 => "Role assigned in user's domain", |
|
col2 => 'Information viewable by unprivileged user'}], |
print => \&print_privacy, |
print => \&print_privacy, |
modify => \&modify_privacy, |
modify => \&modify_privacy, |
}, |
}, |
Line 771 sub process_changes {
|
Line 777 sub process_changes {
|
$output = &modify_trust($dom,$lastactref,%domconfig); |
$output = &modify_trust($dom,$lastactref,%domconfig); |
} elsif ($action eq 'lti') { |
} elsif ($action eq 'lti') { |
$output = &modify_lti($r,$dom,$action,$lastactref,%domconfig); |
$output = &modify_lti($r,$dom,$action,$lastactref,%domconfig); |
|
} elsif ($action eq 'privacy') { |
|
$output = &modify_privacy($dom,%domconfig); |
} elsif ($action eq 'passwords') { |
} elsif ($action eq 'passwords') { |
$output = &modify_passwords($r,$dom,$confname,$lastactref,%domconfig); |
$output = &modify_passwords($r,$dom,$confname,$lastactref,%domconfig); |
} |
} |
Line 823 sub print_config_box {
|
Line 831 sub print_config_box {
|
if ($numheaders > 1) { |
if ($numheaders > 1) { |
my $colspan = ''; |
my $colspan = ''; |
my $rightcolspan = ''; |
my $rightcolspan = ''; |
|
my $leftnobr = ''; |
if (($action eq 'rolecolors') || ($action eq 'defaults') || |
if (($action eq 'rolecolors') || ($action eq 'defaults') || |
($action eq 'directorysrch') || |
($action eq 'directorysrch') || |
(($action eq 'login') && ($numheaders < 4))) { |
(($action eq 'login') && ($numheaders < 4))) { |
Line 831 sub print_config_box {
|
Line 840 sub print_config_box {
|
if ($action eq 'usersessions') { |
if ($action eq 'usersessions') { |
$rightcolspan = ' colspan="3"'; |
$rightcolspan = ' colspan="3"'; |
} |
} |
|
if ($action eq 'passwords') { |
|
$leftnobr = ' LC_nobreak'; |
|
} |
$output .= ' |
$output .= ' |
<tr> |
<tr> |
<td> |
<td> |
<table class="LC_nested"> |
<table class="LC_nested"> |
<tr class="LC_info_row"> |
<tr class="LC_info_row"> |
<td class="LC_left_item"'.$colspan.'>'.&mt($item->{'header'}->[0]->{'col1'}).'</td> |
<td class="LC_left_item'.$leftnobr.'"'.$colspan.'>'.&mt($item->{'header'}->[0]->{'col1'}).'</td> |
<td class="LC_right_item"'.$rightcolspan.'>'.&mt($item->{'header'}->[0]->{'col2'}).'</td> |
<td class="LC_right_item"'.$rightcolspan.'>'.&mt($item->{'header'}->[0]->{'col2'}).'</td> |
</tr>'; |
</tr>'; |
$rowtotal ++; |
$rowtotal ++; |
Line 844 sub print_config_box {
|
Line 856 sub print_config_box {
|
($action eq 'usermodification') || ($action eq 'defaults') || ($action eq 'coursedefaults') || |
($action eq 'usermodification') || ($action eq 'defaults') || ($action eq 'coursedefaults') || |
($action eq 'selfenrollment') || ($action eq 'usersessions') || ($action eq 'ssl') || |
($action eq 'selfenrollment') || ($action eq 'usersessions') || ($action eq 'ssl') || |
($action eq 'directorysrch') || ($action eq 'trust') || ($action eq 'helpsettings') || |
($action eq 'directorysrch') || ($action eq 'trust') || ($action eq 'helpsettings') || |
($action eq 'contacts')) { |
($action eq 'contacts') || ($action eq 'privacy')) { |
$output .= $item->{'print'}->('top',$dom,$settings,\$rowtotal); |
$output .= $item->{'print'}->('top',$dom,$settings,\$rowtotal); |
} elsif ($action eq 'passwords') { |
} elsif ($action eq 'passwords') { |
$output .= $item->{'print'}->('top',$dom,$confname,$settings,\$rowtotal); |
$output .= $item->{'print'}->('top',$dom,$confname,$settings,\$rowtotal); |
Line 879 sub print_config_box {
|
Line 891 sub print_config_box {
|
if (($action eq 'autoupdate') || ($action eq 'usercreation') || |
if (($action eq 'autoupdate') || ($action eq 'usercreation') || |
($action eq 'selfcreation') || ($action eq 'selfenrollment') || |
($action eq 'selfcreation') || ($action eq 'selfenrollment') || |
($action eq 'usersessions') || ($action eq 'coursecategories') || |
($action eq 'usersessions') || ($action eq 'coursecategories') || |
($action eq 'trust') || ($action eq 'contacts') || ($action eq 'passwords')) { |
($action eq 'trust') || ($action eq 'contacts') || |
|
($action eq 'privacy') || ($action eq 'passwords')) { |
|
my $leftnobr = ' LC_nobreak'; |
if ($action eq 'coursecategories') { |
if ($action eq 'coursecategories') { |
$output .= &print_coursecategories('middle',$dom,$item,$settings,\$rowtotal); |
$output .= &print_coursecategories('middle',$dom,$item,$settings,\$rowtotal); |
$colspan = ' colspan="2"'; |
$colspan = ' colspan="2"'; |
Line 932 sub print_config_box {
|
Line 946 sub print_config_box {
|
</tr>'."\n"; |
</tr>'."\n"; |
if ($action eq 'coursecategories') { |
if ($action eq 'coursecategories') { |
$output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal); |
$output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal); |
} elsif (($action eq 'contacts') || ($action eq 'passwords')) { |
} elsif (($action eq 'contacts') || ($action eq 'privacy') || ($action eq 'passwords')) { |
if ($action eq 'passwords') { |
if ($action eq 'passwords') { |
$output .= $item->{'print'}->('lower',$dom,$confname,$settings,\$rowtotal); |
$output .= $item->{'print'}->('lower',$dom,$confname,$settings,\$rowtotal); |
} else { |
} else { |
Line 947 sub print_config_box {
|
Line 961 sub print_config_box {
|
<td> |
<td> |
<table class="LC_nested"> |
<table class="LC_nested"> |
<tr class="LC_info_row"> |
<tr class="LC_info_row"> |
<td class="LC_left_item"'.$colspan.'>'.&mt($item->{'header'}->[3]->{'col1'}).'</td> |
<td class="LC_left_item'.$leftnobr.'"'.$colspan.'>'.&mt($item->{'header'}->[3]->{'col1'}).'</td> |
<td class="LC_right_item"'.$colspan.'>'.&mt($item->{'header'}->[3]->{'col2'}).'</td></tr>'."\n"; |
<td class="LC_right_item"'.$colspan.'>'.&mt($item->{'header'}->[3]->{'col2'}).'</td></tr>'."\n"; |
if ($action eq 'passwords') { |
if ($action eq 'passwords') { |
$output .= $item->{'print'}->('bottom',$dom,$confname,$settings,\$rowtotal); |
$output .= $item->{'print'}->('bottom',$dom,$confname,$settings,\$rowtotal); |
Line 2896 function toggleLTI(form,setting,item) {
|
Line 2910 function toggleLTI(form,setting,item) {
|
} |
} |
} |
} |
} |
} |
} else if ((setting == 'user') || (setting == 'crs') || (setting == 'passback')) { |
} else if ((setting == 'user') || (setting == 'crs') || (setting == 'passback') || (setting == 'callback')) { |
var radioname = ''; |
var radioname = ''; |
var divid = ''; |
var divid = ''; |
if (setting == 'user') { |
if (setting == 'user') { |
Line 2905 function toggleLTI(form,setting,item) {
|
Line 2919 function toggleLTI(form,setting,item) {
|
} else if (setting == 'crs') { |
} else if (setting == 'crs') { |
radioname = 'lti_mapcrs_'+item; |
radioname = 'lti_mapcrs_'+item; |
divid = 'lti_crsfield_'+item; |
divid = 'lti_crsfield_'+item; |
|
} else if (setting == 'callback') { |
|
radioname = 'lti_callback_'+item; |
|
divid = 'lti_callbackfield_'+item; |
} else { |
} else { |
radioname = 'lti_passback_'+item; |
radioname = 'lti_passback_'+item; |
divid = 'lti_passback_'+item; |
divid = 'lti_passback_'+item; |
Line 2914 function toggleLTI(form,setting,item) {
|
Line 2931 function toggleLTI(form,setting,item) {
|
var setvis = ''; |
var setvis = ''; |
for (var i=0; i<num; i++) { |
for (var i=0; i<num; i++) { |
if (form.elements[radioname][i].checked) { |
if (form.elements[radioname][i].checked) { |
if (setting == 'passback') { |
if ((setting == 'passback') || (setting == 'callback')) { |
if (form.elements[radioname][i].value == '1') { |
if (form.elements[radioname][i].value == '1') { |
if (document.getElementById(divid)) { |
if (document.getElementById(divid)) { |
document.getElementById(divid).style.display = 'inline-block'; |
document.getElementById(divid).style.display = 'inline-block'; |
Line 4948 sub lti_names {
|
Line 4965 sub lti_names {
|
|
|
sub lti_options { |
sub lti_options { |
my ($num,$current,$itemcount,%lt) = @_; |
my ($num,$current,$itemcount,%lt) = @_; |
my (%checked,%rolemaps,$crssecsrc,$userfield,$cidfield); |
my (%checked,%rolemaps,$crssecsrc,$userfield,$cidfield,$callback); |
$checked{'mapuser'}{'sourcedid'} = ' checked="checked"'; |
$checked{'mapuser'}{'sourcedid'} = ' checked="checked"'; |
$checked{'mapcrs'}{'course_offering_sourcedid'} = ' checked="checked"'; |
$checked{'mapcrs'}{'course_offering_sourcedid'} = ' checked="checked"'; |
$checked{'makecrs'}{'N'} = ' checked="checked"'; |
$checked{'makecrs'}{'N'} = ' checked="checked"'; |
Line 4966 sub lti_options {
|
Line 4983 sub lti_options {
|
my $crsfieldsty = 'none'; |
my $crsfieldsty = 'none'; |
my $crssecfieldsty = 'none'; |
my $crssecfieldsty = 'none'; |
my $secsrcfieldsty = 'none'; |
my $secsrcfieldsty = 'none'; |
|
my $callbacksty = 'none'; |
my $passbacksty = 'none'; |
my $passbacksty = 'none'; |
my $optionsty = 'block'; |
my $optionsty = 'block'; |
my $lcauthparm; |
my $lcauthparm; |
Line 5045 sub lti_options {
|
Line 5063 sub lti_options {
|
} else { |
} else { |
$checked{'crssec'}{'N'} = ' checked="checked"'; |
$checked{'crssec'}{'N'} = ' checked="checked"'; |
} |
} |
|
if ($current->{'callback'} ne '') { |
|
$callback = $current->{'callback'}; |
|
$checked{'callback'}{'Y'} = ' checked="checked"'; |
|
$callbacksty = 'inline-block'; |
|
} else { |
|
$checked{'callback'}{'N'} = ' checked="checked"'; |
|
} |
if ($current->{'topmenu'}) { |
if ($current->{'topmenu'}) { |
$checked{'topmenu'}{'Y'} = ' checked="checked"'; |
$checked{'topmenu'}{'Y'} = ' checked="checked"'; |
} else { |
} else { |
Line 5070 sub lti_options {
|
Line 5095 sub lti_options {
|
} else { |
} else { |
$checked{'makecrs'}{'N'} = ' checked="checked"'; |
$checked{'makecrs'}{'N'} = ' checked="checked"'; |
$checked{'crssec'}{'N'} = ' checked="checked"'; |
$checked{'crssec'}{'N'} = ' checked="checked"'; |
|
$checked{'callback'}{'N'} = ' checked="checked"'; |
$checked{'topmenu'}{'N'} = ' checked="checked"'; |
$checked{'topmenu'}{'N'} = ' checked="checked"'; |
$checked{'inlinemenu'}{'Y'} = ' checked="checked"'; |
$checked{'inlinemenu'}{'Y'} = ' checked="checked"'; |
$checked{'menuitem'}{'grades'} = ' checked="checked"'; |
$checked{'menuitem'}{'grades'} = ' checked="checked"'; |
Line 5098 sub lti_options {
|
Line 5124 sub lti_options {
|
my $onclickuser = ' onclick="toggleLTI(this.form,'."'user','$num'".');"'; |
my $onclickuser = ' onclick="toggleLTI(this.form,'."'user','$num'".');"'; |
my $onclickcrs = ' onclick="toggleLTI(this.form,'."'crs','$num'".');"'; |
my $onclickcrs = ' onclick="toggleLTI(this.form,'."'crs','$num'".');"'; |
my $onclicksec = ' onclick="toggleLTI(this.form,'."'sec','$num'".');"'; |
my $onclicksec = ' onclick="toggleLTI(this.form,'."'sec','$num'".');"'; |
|
my $onclickcallback = ' onclick="toggleLTI(this.form,'."'callback','$num'".');"'; |
my $onclicksecsrc = ' onclick="toggleLTI(this.form,'."'secsrc','$num'".')"'; |
my $onclicksecsrc = ' onclick="toggleLTI(this.form,'."'secsrc','$num'".')"'; |
my $onclicklcauth = ' onclick="toggleLTI(this.form,'."'lcauth','$num'".')"'; |
my $onclicklcauth = ' onclick="toggleLTI(this.form,'."'lcauth','$num'".')"'; |
my $onclickmenu = ' onclick="toggleLTI(this.form,'."'lcmenu','$num'".');"'; |
my $onclickmenu = ' onclick="toggleLTI(this.form,'."'lcmenu','$num'".');"'; |
Line 5247 sub lti_options {
|
Line 5274 sub lti_options {
|
'<label><input type="radio" name="lti_passbackformat_'.$num.'" value="1.1"'.$pb1p1chk.' />'. |
'<label><input type="radio" name="lti_passbackformat_'.$num.'" value="1.1"'.$pb1p1chk.' />'. |
&mt('Outcomes Service (1.1)').'</label>'.(' 'x2). |
&mt('Outcomes Service (1.1)').'</label>'.(' 'x2). |
'<label><input type="radio" name="lti_passbackformat_'.$num.'" value="1.0"'.$pb1p0chk.'/>'. |
'<label><input type="radio" name="lti_passbackformat_'.$num.'" value="1.0"'.$pb1p0chk.'/>'. |
&mt('Outcomes Extension (1.0)').'</label></span></div></fieldset>'. |
&mt('Outcomes Extension (1.0)').'</label></span></div>'. |
|
'<div style="padding:0;clear:both;margin:0;border:0"></div>'. |
|
'<div class="LC_floatleft"><span class="LC_nobreak">'.&mt('Callback on logout').': '. |
|
'<label><input type="radio" name="lti_callback_'.$num.'" value="0"'. |
|
$checked{'callback'}{'N'}.$onclickcallback.' />'.&mt('No').'</label>'.(' 'x2). |
|
'<label><input type="radio" name="lti_callback_'.$num.'" value="1"'. |
|
$checked{'callback'}{'Y'}.$onclickcallback.' />'.&mt('Yes').'</label></span></div>'. |
|
'<div class="LC_floatleft" style="display:'.$callbacksty.';" id="lti_callbackfield_'.$num.'">'. |
|
'<span class="LC_nobreak">'.&mt('Parameter').': '. |
|
'<input type="text" name="lti_callbackparam_'.$num.'" value="'.$callback.'" /></span>'. |
|
'</div><div style="padding:0;clear:both;margin:0;border:0"></div></fieldset>'. |
'<fieldset class="ltioption_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('Course defaults (Course Coordinator can override)').'</legend>'. |
'<fieldset class="ltioption_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('Course defaults (Course Coordinator can override)').'</legend>'. |
'<div class="LC_floatleft"><span class="LC_nobreak">'.$lt{'topmenu'}.': '. |
'<div class="LC_floatleft"><span class="LC_nobreak">'.$lt{'topmenu'}.': '. |
'<label><input type="radio" name="lti_topmenu_'.$num.'" value="0"'. |
'<label><input type="radio" name="lti_topmenu_'.$num.'" value="0"'. |
Line 5800 sub print_validation_rows {
|
Line 5837 sub print_validation_rows {
|
return $datatable; |
return $datatable; |
} |
} |
|
|
|
sub print_privacy { |
|
my ($position,$dom,$settings,$rowtotal) = @_; |
|
my ($datatable,$css_class,$numinrow,@items,%names,$othertitle,$usertypes,$types); |
|
my $itemcount = 0; |
|
unless ($position eq 'top') { |
|
@items = ('domain','author','course','community'); |
|
%names = &Apache::lonlocal::texthash ( |
|
domain => 'Assigned domain role(s)', |
|
author => 'Assigned co-author role(s)', |
|
course => 'Assigned course role(s)', |
|
community => 'Assigned community role', |
|
); |
|
$numinrow = 4; |
|
($othertitle,$usertypes,$types) = |
|
&Apache::loncommon::sorted_inst_types($dom); |
|
} |
|
if (($position eq 'top') || ($position eq 'middle')) { |
|
my (%by_ip,%by_location,@intdoms,@instdoms); |
|
&build_location_hashes(\@intdoms,\%by_ip,\%by_location,\@instdoms); |
|
if ($position eq 'top') { |
|
my %curr; |
|
my @options = ('none','user','domain','auto'); |
|
my %titles = &Apache::lonlocal::texthash ( |
|
none => 'Not allowed', |
|
user => 'User authorizes', |
|
domain => 'DC authorizes', |
|
auto => 'Unrestricted', |
|
instdom => 'Other domain shares institution/provider', |
|
extdom => 'Other domain has different institution/provider', |
|
); |
|
my %names = &Apache::lonlocal::texthash ( |
|
domain => 'Domain role', |
|
author => 'Co-author role', |
|
course => 'Course role', |
|
community => 'Community role', |
|
); |
|
my $primary_id = &Apache::lonnet::domain($dom,'primary'); |
|
my $intdom = &Apache::lonnet::internet_dom($primary_id); |
|
foreach my $domtype ('instdom','extdom') { |
|
my (%checked,$skip); |
|
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
|
$datatable .= '<tr'.$css_class.'><td>'.$titles{$domtype}.'</td>'. |
|
'<td class="LC_left_item">'; |
|
if ($domtype eq 'instdom') { |
|
unless (@instdoms > 1) { |
|
$datatable .= &mt('Nothing to set, as no domains besides [_1] are hosted by [_2]',$dom,$intdom); |
|
$skip = 1; |
|
} |
|
} elsif ($domtype eq 'extdom') { |
|
if (keys(%by_location) == 0) { |
|
$datatable .= &mt('Nothing to set, as no other hosts besides [_1]',$intdom); |
|
$skip = 1; |
|
} |
|
} |
|
unless ($skip) { |
|
foreach my $roletype ('domain','author','course','community') { |
|
$checked{'auto'} = ' checked="checked"'; |
|
if (ref($settings) eq 'HASH') { |
|
if (ref($settings->{approval}) eq 'HASH') { |
|
if (ref($settings->{approval}->{$domtype}) eq 'HASH') { |
|
if ($settings->{approval}->{$domtype}->{$roletype}=~ /^(none|user|domain)$/) { |
|
$checked{$1} = ' checked="checked"'; |
|
$checked{'auto'} = ''; |
|
} |
|
} |
|
} |
|
} |
|
$datatable .= '<fieldset><legend>'.$names{$roletype}.'</legend>'; |
|
foreach my $option (@options) { |
|
$datatable .= '<span class="LC_nobreak"><label>'. |
|
'<input type="radio" name="privacy_approval_'.$domtype.'_'.$roletype.'" '. |
|
'value="'.$option.'"'.$checked{$option}.' />'.$titles{$option}. |
|
'</label></span> '; |
|
} |
|
$datatable .= '</fieldset>'; |
|
} |
|
} |
|
$datatable .= '</td></tr>'; |
|
$itemcount ++; |
|
} |
|
} elsif ($position eq 'middle') { |
|
if ((@instdoms > 1) || (keys(%by_location) > 0)) { |
|
if ((ref($types) eq 'ARRAY') && (ref($usertypes) eq 'HASH')) { |
|
foreach my $item (@{$types}) { |
|
$datatable .= &modifiable_userdata_row('privacy','othdom_'.$item,$settings, |
|
$numinrow,$itemcount,'','','','','', |
|
'',$usertypes->{$item}); |
|
$itemcount ++; |
|
} |
|
} |
|
$datatable .= &modifiable_userdata_row('privacy','othdom_default',$settings, |
|
$numinrow,$itemcount,'','','','','', |
|
'',$othertitle); |
|
$itemcount ++; |
|
} else { |
|
my (@insttypes,%insttitles); |
|
if ((ref($types) eq 'ARRAY') && (ref($usertypes) eq 'HASH')) { |
|
@insttypes = @{$types}; |
|
%insttitles = %{$usertypes}; |
|
} |
|
foreach my $item (@insttypes,'default') { |
|
my $title; |
|
if ($item eq 'default') { |
|
$title = $othertitle; |
|
} else { |
|
$title = $insttitles{$item}; |
|
} |
|
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
|
$datatable .= '<tr'.$css_class.'>'. |
|
'<td class="LC_left_item">'.$title.'</td>'. |
|
'<td class="LC_left_item">'. |
|
&mt('Nothing to set here, as there are no other domains'). |
|
'</td></tr>'; |
|
$itemcount ++; |
|
} |
|
} |
|
} |
|
} else { |
|
my $prefix; |
|
if ($position eq 'lower') { |
|
$prefix = 'priv'; |
|
} else { |
|
$prefix = 'unpriv'; |
|
} |
|
foreach my $item (@items) { |
|
$datatable .= &modifiable_userdata_row('privacy',$prefix.'_'.$item,$settings, |
|
$numinrow,$itemcount,'','','','','', |
|
'',$names{$item}); |
|
$itemcount ++; |
|
} |
|
} |
|
if (ref($rowtotal)) { |
|
$$rowtotal += $itemcount; |
|
} |
|
return $datatable; |
|
} |
|
|
sub print_passwords { |
sub print_passwords { |
my ($position,$dom,$confname,$settings,$rowtotal) = @_; |
my ($position,$dom,$confname,$settings,$rowtotal) = @_; |
my ($datatable,$css_class); |
my ($datatable,$css_class); |
Line 5822 sub print_passwords {
|
Line 5996 sub print_passwords {
|
max => 'Maximum password length', |
max => 'Maximum password length', |
chars => 'Required characters', |
chars => 'Required characters', |
expire => 'Password expiration (days)', |
expire => 'Password expiration (days)', |
|
numsaved => 'Number of previous passwords to save and disallow reuse', |
); |
); |
if ($position eq 'top') { |
if ($position eq 'top') { |
my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); |
my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); |
Line 5886 sub print_passwords {
|
Line 6061 sub print_passwords {
|
$datatable .= '<span class="LC_nobreak"><label>'. |
$datatable .= '<span class="LC_nobreak"><label>'. |
'<input type="checkbox" name="passwords_case_sensitive" value="'. |
'<input type="checkbox" name="passwords_case_sensitive" value="'. |
$item.'"'.$checkedcase.' />'.$usertypes->{$item}.'</label>'. |
$item.'"'.$checkedcase.' />'.$usertypes->{$item}.'</label>'. |
'<span> '; |
'</span> '; |
} |
} |
} |
} |
my $checkedcase; |
my $checkedcase; |
Line 5990 sub print_passwords {
|
Line 6165 sub print_passwords {
|
&mt('(If you use the same account ... reset a password from this page.)').'</span><br /><br />'. |
&mt('(If you use the same account ... reset a password from this page.)').'</span><br /><br />'. |
&mt('Include custom text:'); |
&mt('Include custom text:'); |
if ($customurl) { |
if ($customurl) { |
my $link = &Apache::loncommon::modal_link($customurl,&mt('Custom text file'),600,500, |
my $link = &Apache::loncommon::modal_link($customurl,&mt('custom text'),600,500, |
undef,undef,undef,undef,'background-color:#ffffff'); |
undef,undef,undef,undef,'background-color:#ffffff'); |
$datatable .= '<span class="LC_nobreak"> '.$link. |
$datatable .= '<span class="LC_nobreak"> '.$link. |
'<label><input type="checkbox" name="passwords_custom_del"'. |
'<label><input type="checkbox" name="passwords_custom_del"'. |
Line 6085 sub print_passwords {
|
Line 6260 sub print_passwords {
|
$itemcount ++; |
$itemcount ++; |
} |
} |
} elsif ($position eq 'lower') { |
} elsif ($position eq 'lower') { |
my ($min,$max,%chars,$expire); |
my ($min,$max,%chars,$expire,$numsaved); |
|
$min = $Apache::lonnet::passwdmin; |
if (ref($settings) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
if ($settings->{min}) { |
if ($settings->{min}) { |
$min = $settings->{min}; |
$min = $settings->{min}; |
Line 6099 sub print_passwords {
|
Line 6275 sub print_passwords {
|
if ($settings->{expire}) { |
if ($settings->{expire}) { |
$expire = $settings->{expire}; |
$expire = $settings->{expire}; |
} |
} |
} else { |
if ($settings->{numsaved}) { |
$min = '7'; |
$numsaved = $settings->{numsaved}; |
|
} |
} |
} |
my %rulenames = &Apache::lonlocal::texthash( |
my %rulenames = &Apache::lonlocal::texthash( |
uc => 'At least one upper case letter', |
uc => 'At least one upper case letter', |
Line 6111 sub print_passwords {
|
Line 6288 sub print_passwords {
|
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
$datatable .= '<tr'.$css_class.'><td>'.$titles{'min'}.'</td>'. |
$datatable .= '<tr'.$css_class.'><td>'.$titles{'min'}.'</td>'. |
'<td class="LC_left_item"><span class="LC_nobreak">'. |
'<td class="LC_left_item"><span class="LC_nobreak">'. |
'<input type="text" name="passwords_min" value="'.$min.'" size="3" />'. |
'<input type="text" name="passwords_min" value="'.$min.'" size="3" '. |
'<span class="LC_fontsize_small"> '.&mt('(Leave blank for no minimum)').'</span>'. |
'onblur="javascript:warnIntPass(this);" />'. |
|
'<span class="LC_fontsize_small"> '.&mt('(Enter an integer: 7 or larger)').'</span>'. |
'</span></td></tr>'; |
'</span></td></tr>'; |
$itemcount ++; |
$itemcount ++; |
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
$datatable .= '<tr'.$css_class.'><td>'.$titles{'max'}.'</td>'. |
$datatable .= '<tr'.$css_class.'><td>'.$titles{'max'}.'</td>'. |
'<td class="LC_left_item"><span class="LC_nobreak">'. |
'<td class="LC_left_item"><span class="LC_nobreak">'. |
'<input type="text" name="passwords_max" value="'.$max.'" size="3" />'. |
'<input type="text" name="passwords_max" value="'.$max.'" size="3" '. |
|
'onblur="javascript:warnIntPass(this);" />'. |
'<span class="LC_fontsize_small"> '.&mt('(Leave blank for no maximum)').'</span>'. |
'<span class="LC_fontsize_small"> '.&mt('(Leave blank for no maximum)').'</span>'. |
'</span></td></tr>'; |
'</span></td></tr>'; |
$itemcount ++; |
$itemcount ++; |
Line 6158 sub print_passwords {
|
Line 6337 sub print_passwords {
|
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
$datatable .= '<tr'.$css_class.'><td>'.$titles{'expire'}.'</td>'. |
$datatable .= '<tr'.$css_class.'><td>'.$titles{'expire'}.'</td>'. |
'<td class="LC_left_item"><span class="LC_nobreak">'. |
'<td class="LC_left_item"><span class="LC_nobreak">'. |
'<input type="text" name="passwords_expire" value="'.$expire.'" size="4" />'. |
'<input type="text" name="passwords_expire" value="'.$expire.'" size="4" '. |
|
'onblur="javascript:warnIntPass(this);" />'. |
'<span class="LC_fontsize_small"> '.&mt('(Leave blank for no expiration)').'</span>'. |
'<span class="LC_fontsize_small"> '.&mt('(Leave blank for no expiration)').'</span>'. |
'</span></td></tr>'; |
'</span></td></tr>'; |
|
$itemcount ++; |
|
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
|
$datatable .= '<tr'.$css_class.'><td>'.$titles{'numsaved'}.'</td>'. |
|
'<td class="LC_left_item"><span class="LC_nobreak">'. |
|
'<input type="text" name="passwords_numsaved" value="'.$numsaved.'" size="3" '. |
|
'onblur="javascript:warnIntPass(this);" />'. |
|
'<span class="LC_fontsize_small"> '.&mt('(Leave blank to not save previous passwords)').'</span>'. |
|
'</span></td></tr>'; |
} else { |
} else { |
my $checkedon; |
my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); |
my $checkedoff = ' checked="checked"'; |
my %ownerchg = ( |
|
by => {}, |
|
for => {}, |
|
); |
|
my %ownertitles = &Apache::lonlocal::texthash ( |
|
by => 'Course owner status(es) allowed', |
|
for => 'Student status(es) allowed', |
|
); |
if (ref($settings) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
if ($settings->{crsownerchg}) { |
if (ref($settings->{crsownerchg}) eq 'HASH') { |
$checkedon = $checkedoff; |
if (ref($settings->{crsownerchg}{'by'}) eq 'ARRAY') { |
$checkedoff = ''; |
map { $ownerchg{by}{$_} = 1; } (@{$settings->{crsownerchg}{'by'}}); |
|
} |
|
if (ref($settings->{crsownerchg}{'for'}) eq 'ARRAY') { |
|
map { $ownerchg{for}{$_} = 1; } (@{$settings->{crsownerchg}{'for'}}); |
|
} |
} |
} |
} |
} |
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
$datatable .= '<tr '.$css_class.'>'. |
$datatable .= '<tr '.$css_class.'>'. |
'<td>'. |
'<td>'. |
&mt('Requirements').'<ul>'. |
&mt('Requirements').'<ul>'. |
'<li>'.&mt("Course 'type' is not a Community").'</li>'. |
'<li>'.&mt("Course 'type' is not a Community or Placement Test").'</li>'. |
'<li>'.&mt('User is Course Coordinator and also course owner').'</li>'. |
'<li>'.&mt('User is Course Coordinator and also course owner').'</li>'. |
'<li>'.&mt("Student's only active roles are student role(s) in course(s) owned by this user").'</li>'. |
'<li>'.&mt("Student's only active roles are student role(s) in course(s) owned by this user").'</li>'. |
|
'<li>'.&mt('User, course, and student share same domain').'</li>'. |
'</ul>'. |
'</ul>'. |
'</td>'. |
'</td>'. |
'<td class="LC_left_item" colspan="2"><span class="LC_nobreak">'. |
'<td class="LC_left_item">'; |
'<label><input type="radio" name="passwords_crsowner" value="1"'.$checkedon.' />'.&mt('Yes').'</label></span> '. |
foreach my $item ('by','for') { |
'<span class="LC_nobreak"><label><input type="radio" name="passwords_crsowner" value="0"'.$checkedoff.' />'. |
$datatable .= '<fieldset style="display: inline-block;">'. |
&mt('No').'</label></span>'. |
'<legend>'.$ownertitles{$item}.'</legend>'; |
'</td></tr>'; |
if ((ref($types) eq 'ARRAY') && (ref($usertypes) eq 'HASH')) { |
|
foreach my $type (@{$types}) { |
|
my $checked; |
|
if ($ownerchg{$item}{$type}) { |
|
$checked = ' checked="checked"'; |
|
} |
|
$datatable .= '<span class="LC_nobreak"><label>'. |
|
'<input type="checkbox" name="passwords_crsowner_'.$item.'" value="'. |
|
$type.'"'.$checked.' />'.$usertypes->{$type}.'</label>'. |
|
'</span> '; |
|
} |
|
} |
|
my $checked; |
|
if ($ownerchg{$item}{'default'}) { |
|
$checked = ' checked="checked"'; |
|
} |
|
$datatable .= '<span class="LC_nobreak"><label><input type="checkbox" '. |
|
'name="passwords_crsowner_'.$item.'" value="default"'.$checked.' />'. |
|
$othertitle.'</label></span></fieldset>'; |
|
} |
|
$datatable .= '</td></tr>'; |
} |
} |
return $datatable; |
return $datatable; |
} |
} |
Line 9084 ENDSCRIPT
|
Line 9303 ENDSCRIPT
|
} |
} |
|
|
sub passwords_javascript { |
sub passwords_javascript { |
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 %intalert = &Apache::lonlocal::texthash ( |
my $intauthcost = &mt('Warning: bcrypt encryption cost for internal authentication must be an integer.'); |
authcheck => '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.', |
&js_escape(\$intauthcheck); |
authcost => 'Warning: bcrypt encryption cost for internal authentication must be an integer.', |
&js_escape(\$intauthcost); |
passmin => 'Warning: minimum password length must be a positive integer greater than 6.', |
|
passmax => 'Warning: maximum password length must be a positive integer (or blank).', |
|
passexp => 'Warning: days before password expiration must be a positive integer (or blank).', |
|
passnum => 'Warning: number of previous passwords to save must be a positive integer (or blank).', |
|
); |
|
&js_escape(\%intalert); |
|
my $defmin = $Apache::lonnet::passwdmin; |
my $intauthjs = <<"ENDSCRIPT"; |
my $intauthjs = <<"ENDSCRIPT"; |
|
|
function warnIntAuth(field) { |
function warnIntAuth(field) { |
if (field.name == 'intauth_check') { |
if (field.name == 'intauth_check') { |
if (field.value == '2') { |
if (field.value == '2') { |
alert('$intauthcheck'); |
alert('$intalert{authcheck}'); |
} |
} |
} |
} |
if (field.name == 'intauth_cost') { |
if (field.name == 'intauth_cost') { |
Line 9101 function warnIntAuth(field) {
|
Line 9326 function warnIntAuth(field) {
|
if (field.value != '') { |
if (field.value != '') { |
var regexdigit=/^\\d+\$/; |
var regexdigit=/^\\d+\$/; |
if (!regexdigit.test(field.value)) { |
if (!regexdigit.test(field.value)) { |
alert('$intauthcost'); |
alert('$intalert{authcost}'); |
|
} |
|
} |
|
} |
|
return; |
|
} |
|
|
|
function warnIntPass(field) { |
|
field.value.replace(/^\s+/,''); |
|
field.value.replace(/\s+\$/,''); |
|
var regexdigit=/^\\d+\$/; |
|
if (field.name == 'passwords_min') { |
|
if (field.value == '') { |
|
alert('$intalert{passmin}'); |
|
field.value = '$defmin'; |
|
} else { |
|
if (!regexdigit.test(field.value)) { |
|
alert('$intalert{passmin}'); |
|
field.value = '$defmin'; |
|
} |
|
var minval = parseInt(field.value,10); |
|
if (minval < $defmin) { |
|
alert('$intalert{passmin}'); |
|
field.value = '$defmin'; |
|
} |
|
} |
|
} else { |
|
if (field.value == '0') { |
|
field.value = ''; |
|
} |
|
if (field.value != '') { |
|
if (field.name == 'passwords_expire') { |
|
var regexpposnum=/^\\d+(|\\.\\d*)\$/; |
|
if (!regexpposnum.test(field.value)) { |
|
alert('$intalert{passexp}'); |
|
field.value = ''; |
|
} else { |
|
var expval = parseFloat(field.value); |
|
if (expval == 0) { |
|
alert('$intalert{passexp}'); |
|
field.value = ''; |
|
} |
|
} |
|
} else { |
|
if (!regexdigit.test(field.value)) { |
|
if (field.name == 'passwords_max') { |
|
alert('$intalert{passmax}'); |
|
} else { |
|
if (field.name == 'passwords_numsaved') { |
|
alert('$intalert{passnum}'); |
|
} |
|
} |
|
} |
|
field.value = ''; |
} |
} |
} |
} |
} |
} |
Line 9355 sub build_category_rows {
|
Line 9633 sub build_category_rows {
|
|
|
sub modifiable_userdata_row { |
sub modifiable_userdata_row { |
my ($context,$item,$settings,$numinrow,$rowcount,$usertypes,$fieldsref,$titlesref, |
my ($context,$item,$settings,$numinrow,$rowcount,$usertypes,$fieldsref,$titlesref, |
$rowid,$customcss,$rowstyle) = @_; |
$rowid,$customcss,$rowstyle,$itemdesc) = @_; |
my ($role,$rolename,$statustype); |
my ($role,$rolename,$statustype); |
$role = $item; |
$role = $item; |
if ($context eq 'cancreate') { |
if ($context eq 'cancreate') { |
Line 9378 sub modifiable_userdata_row {
|
Line 9656 sub modifiable_userdata_row {
|
} |
} |
} elsif ($context eq 'lti') { |
} elsif ($context eq 'lti') { |
$rolename = &mt('Institutional data used (if available)'); |
$rolename = &mt('Institutional data used (if available)'); |
|
} elsif ($context eq 'privacy') { |
|
$rolename = $itemdesc; |
} else { |
} else { |
if ($role eq 'cr') { |
if ($role eq 'cr') { |
$rolename = &mt('Custom role'); |
$rolename = &mt('Custom role'); |
Line 9427 sub modifiable_userdata_row {
|
Line 9707 sub modifiable_userdata_row {
|
if (ref($settings) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
$hashref = $settings->{'instdata'}; |
$hashref = $settings->{'instdata'}; |
} |
} |
|
} elsif ($context eq 'privacy') { |
|
my ($key,$inner) = split(/_/,$role); |
|
if (ref($settings) eq 'HASH') { |
|
if (ref($settings->{$key}) eq 'HASH') { |
|
$hashref = $settings->{$key}->{$inner}; |
|
} |
|
} |
} elsif (ref($settings->{$context}) eq 'HASH') { |
} elsif (ref($settings->{$context}) eq 'HASH') { |
if (ref($settings->{$context}->{$role}) eq 'HASH') { |
if (ref($settings->{$context}->{$role}) eq 'HASH') { |
$hashref = $settings->{'lti_instdata'}; |
$hashref = $settings->{'lti_instdata'}; |
Line 9465 sub modifiable_userdata_row {
|
Line 9752 sub modifiable_userdata_row {
|
unless ($role eq 'emailusername') { |
unless ($role eq 'emailusername') { |
if (exists($checks{$fields[$i]})) { |
if (exists($checks{$fields[$i]})) { |
$check = $checks{$fields[$i]}; |
$check = $checks{$fields[$i]}; |
|
} elsif ($context eq 'privacy') { |
|
if ($role =~ /^priv_(domain|course)$/) { |
|
if (ref($settings) ne 'HASH') { |
|
$check = ' checked="checked" '; |
|
} |
|
} elsif ($role =~ /^priv_(author|community)$/) { |
|
if (ref($settings) ne 'HASH') { |
|
unless ($fields[$i] eq 'id') { |
|
$check = ' checked="checked" '; |
|
} |
|
} |
|
} elsif ($role =~ /^(unpriv|othdom)_/) { |
|
if (ref($settings) ne 'HASH') { |
|
if (($fields[$i] eq 'lastname') || ($fields[$i] eq 'firstname')) { |
|
$check = ' checked="checked" '; |
|
} |
|
} |
|
} |
} elsif ($context ne 'lti') { |
} elsif ($context ne 'lti') { |
if ($role eq 'st') { |
if ($role eq 'st') { |
if (ref($settings) ne 'HASH') { |
if (ref($settings) ne 'HASH') { |
Line 9493 sub modifiable_userdata_row {
|
Line 9798 sub modifiable_userdata_row {
|
} else { |
} else { |
if ($context eq 'lti') { |
if ($context eq 'lti') { |
$prefix = 'lti'; |
$prefix = 'lti'; |
|
} elsif ($context eq 'privacy') { |
|
$prefix = 'privacy'; |
} |
} |
$output .= '<label>'. |
$output .= '<label>'. |
'<input type="checkbox" name="'.$prefix.'_'.$role.'" '. |
'<input type="checkbox" name="'.$prefix.'_'.$role.'" '. |
Line 10580 sub check_configuser {
|
Line 10887 sub check_configuser {
|
my ($configuserok,%currroles); |
my ($configuserok,%currroles); |
if ($uhome eq 'no_host') { |
if ($uhome eq 'no_host') { |
srand( time() ^ ($$ + ($$ << 15)) ); # Seed rand. |
srand( time() ^ ($$ + ($$ << 15)) ); # Seed rand. |
my $configpass = &LONCAPA::Enrollment::create_password(); |
my $configpass = &LONCAPA::Enrollment::create_password($dom); |
$configuserok = |
$configuserok = |
&Apache::lonnet::modifyuser($dom,$confname,'','internal', |
&Apache::lonnet::modifyuser($dom,$confname,'','internal', |
$configpass,'','','','','',undef,$servadm); |
$configpass,'','','','','',undef,$servadm); |
Line 12458 sub modify_lti {
|
Line 12765 sub modify_lti {
|
} |
} |
} |
} |
} |
} |
|
if ($env{'form.lti_callback_'.$idx}) { |
|
if ($env{'form.lti_callbackparam_'.$idx}) { |
|
my $callback = $env{'form.lti_callbackparam_'.$idx}; |
|
$callback =~ s/^\s+|\s+$//g; |
|
$confhash{$itemid}{'callback'} = $callback; |
|
} |
|
} |
foreach my $field ('passback','roster','topmenu','inlinemenu') { |
foreach my $field ('passback','roster','topmenu','inlinemenu') { |
if ($env{'form.lti_'.$field.'_'.$idx}) { |
if ($env{'form.lti_'.$field.'_'.$idx}) { |
$confhash{$itemid}{$field} = 1; |
$confhash{$itemid}{$field} = 1; |
Line 12483 sub modify_lti {
|
Line 12797 sub modify_lti {
|
} |
} |
} |
} |
unless (($idx eq 'add') || ($changes{$itemid})) { |
unless (($idx eq 'add') || ($changes{$itemid})) { |
foreach my $field ('mapuser','mapcrs','makecrs','section','passback','roster','lcauth','lcauthparm','topmenu','inlinemenu') { |
foreach my $field ('mapuser','mapcrs','makecrs','section','passback','roster','lcauth','lcauthparm','topmenu','inlinemenu','callback') { |
if ($domconfig{$action}{$itemid}{$field} ne $confhash{$itemid}{$field}) { |
if ($domconfig{$action}{$itemid}{$field} ne $confhash{$itemid}{$field}) { |
$changes{$itemid} = 1; |
$changes{$itemid} = 1; |
} |
} |
Line 12709 sub modify_lti {
|
Line 13023 sub modify_lti {
|
} else { |
} else { |
$resulttext .= '<li>'.&mt('No section assignment').'</li>'; |
$resulttext .= '<li>'.&mt('No section assignment').'</li>'; |
} |
} |
|
if ($confhash{$itemid}{'callback'}) { |
|
$resulttext .= '<li>'.&mt('Callback setting').': '.$confhash{$itemid}{'callback'}.'</li>'; |
|
} else { |
|
$resulttext .= '<li>'.&mt('No callback to logout LON-CAPA session when user logs out of Comsumer'); |
|
} |
foreach my $item ('passback','roster','topmenu','inlinemenu') { |
foreach my $item ('passback','roster','topmenu','inlinemenu') { |
$resulttext .= '<li>'.$lt{$item}.': '; |
$resulttext .= '<li>'.$lt{$item}.': '; |
if ($confhash{$itemid}{$item}) { |
if ($confhash{$itemid}{$item}) { |
Line 13958 sub modify_contacts {
|
Line 14277 sub modify_contacts {
|
return $resulttext; |
return $resulttext; |
} |
} |
|
|
|
sub modify_privacy { |
|
my ($dom,%domconfig) = @_; |
|
my ($resulttext,%current,%changes); |
|
if (ref($domconfig{'privacy'}) eq 'HASH') { |
|
%current = %{$domconfig{'privacy'}}; |
|
} |
|
my @fields = ('lastname','firstname','middlename','generation','permanentemail','id'); |
|
my @items = ('domain','author','course','community'); |
|
my %names = &Apache::lonlocal::texthash ( |
|
domain => 'Assigned domain role(s)', |
|
author => 'Assigned co-author role(s)', |
|
course => 'Assigned course role(s)', |
|
community => 'Assigned community role', |
|
); |
|
my %roles = &Apache::lonlocal::texthash ( |
|
domain => 'Domain role', |
|
author => 'Co-author role', |
|
course => 'Course role', |
|
community => 'Community role', |
|
); |
|
my %titles = &Apache::lonlocal::texthash ( |
|
approval => 'Approval for role in different domain', |
|
othdom => 'User information available in other domain', |
|
priv => 'Information viewable by privileged user in same domain', |
|
unpriv => 'Information viewable by unprivileged user in same domain', |
|
instdom => 'Other domain shares institution/provider', |
|
extdom => 'Other domain has different institution/provider', |
|
none => 'Not allowed', |
|
user => 'User authorizes', |
|
domain => 'Domain Coordinator authorizes', |
|
auto => 'Unrestricted', |
|
); |
|
my %fieldnames = &Apache::lonlocal::texthash ( |
|
id => 'Student/Employee ID', |
|
permanentemail => 'E-mail address', |
|
lastname => 'Last Name', |
|
firstname => 'First Name', |
|
middlename => 'Middle Name', |
|
generation => 'Generation', |
|
); |
|
my ($othertitle,$usertypes,$types) = |
|
&Apache::loncommon::sorted_inst_types($dom); |
|
my (%by_ip,%by_location,@intdoms,@instdoms); |
|
&build_location_hashes(\@intdoms,\%by_ip,\%by_location,\@instdoms); |
|
|
|
my %privacyhash = ( |
|
'approval' => { |
|
instdom => {}, |
|
extdom => {}, |
|
}, |
|
'othdom' => {}, |
|
'priv' => {}, |
|
'unpriv' => {}, |
|
); |
|
foreach my $item (@items) { |
|
if (@instdoms > 1) { |
|
if ($env{'form.privacy_approval_instdom'.$item} =~ /^(none|user|domain|auto)$/) { |
|
$privacyhash{'approval'}{'instdom'}{$item} = $env{'form.privacy_approval_instdom_'.$item}; |
|
} |
|
if (ref($current{'approval'}) eq 'HASH') { |
|
if (ref($current{'approval'}{'instdom'}) eq 'HASH') { |
|
unless ($privacyhash{'approval'}{'instdom'}{$item} eq $current{'approval'}{'instdom'}{$item}) { |
|
$changes{'approval'} = 1; |
|
} |
|
} |
|
} elsif ($privacyhash{'approval'}{'instdom'}{$item} ne 'auto') { |
|
$changes{'approval'} = 1; |
|
} |
|
} |
|
if (keys(%by_location) > 0) { |
|
if ($env{'form.privacy_approval_extdom_'.$item} =~ /^(none|user|domain|auto)$/) { |
|
$privacyhash{'approval'}{'extdom'}{$item} = $env{'form.privacy_approval_extdom_'.$item}; |
|
} |
|
if (ref($current{'approval'}) eq 'HASH') { |
|
if (ref($current{'approval'}{'extdom'}) eq 'HASH') { |
|
unless ($privacyhash{'approval'}{'extdom'}{$item} eq $current{'approval'}{'extdom'}{$item}) { |
|
$changes{'approval'} = 1; |
|
} |
|
} |
|
} elsif ($privacyhash{'approval'}{'extdom'}{$item} ne 'auto') { |
|
$changes{'approval'} = 1; |
|
} |
|
} |
|
foreach my $status ('priv','unpriv') { |
|
my @possibles = sort(&Apache::loncommon::get_env_multiple('form.privacy_'.$status.'_'.$item)); |
|
my @newvalues; |
|
foreach my $field (@possibles) { |
|
if (grep(/^\Q$field\E$/,@fields)) { |
|
$privacyhash{$status}{$item}{$field} = 1; |
|
push(@newvalues,$field); |
|
} |
|
} |
|
@newvalues = sort(@newvalues); |
|
if (ref($current{$status}) eq 'HASH') { |
|
if (ref($current{$status}{$item}) eq 'HASH') { |
|
my @currvalues = sort(keys(%{$current{$status}{$item}})); |
|
my @diffs = &Apache::loncommon::compare_arrays(\@currvalues,\@newvalues); |
|
if (@diffs > 0) { |
|
$changes{$status} = 1; |
|
} |
|
} |
|
} else { |
|
my @stdfields; |
|
foreach my $field (@fields) { |
|
if ($field eq 'id') { |
|
next if ($status eq 'unpriv'); |
|
next if (($status eq 'priv') && ($item eq 'community')); |
|
} |
|
push(@stdfields,$field); |
|
} |
|
my @diffs = &Apache::loncommon::compare_arrays(\@stdfields,\@newvalues); |
|
if (@diffs > 0) { |
|
$changes{$status} = 1; |
|
} |
|
} |
|
} |
|
} |
|
if ((@instdoms > 1) || (keys(%by_location) > 0)) { |
|
my @statuses; |
|
if (ref($types) eq 'ARRAY') { |
|
@statuses = @{$types}; |
|
} |
|
foreach my $type (@statuses,'default') { |
|
my @possfields = &Apache::loncommon::get_env_multiple('form.privacy_othdom_'.$type); |
|
my @newvalues; |
|
foreach my $field (sort(@possfields)) { |
|
if (grep(/^\Q$field\E$/,@fields)) { |
|
$privacyhash{'othdom'}{$type}{$field} = 1; |
|
push(@newvalues,$field); |
|
} |
|
} |
|
@newvalues = sort(@newvalues); |
|
if (ref($current{'othdom'}) eq 'HASH') { |
|
if (ref($current{'othdom'}{$type}) eq 'HASH') { |
|
my @currvalues = sort(keys(%{$current{'othdom'}{$type}})); |
|
my @diffs = &Apache::loncommon::compare_arrays(\@currvalues,\@newvalues); |
|
if (@diffs > 0) { |
|
$changes{'othdom'} = 1; |
|
} |
|
} |
|
} else { |
|
my @stdfields = ('lastname','firstname','middlename','generation','permanentemail'); |
|
my @diffs = &Apache::loncommon::compare_arrays(\@stdfields,\@newvalues); |
|
if (@diffs > 0) { |
|
$changes{'othdom'} = 1; |
|
} |
|
} |
|
} |
|
} |
|
my %confighash = ( |
|
privacy => \%privacyhash, |
|
); |
|
my $putresult = &Apache::lonnet::put_dom('configuration',\%confighash,$dom); |
|
if ($putresult eq 'ok') { |
|
if (keys(%changes) > 0) { |
|
$resulttext = &mt('Changes made: ').'<ul>'; |
|
foreach my $key ('approval','othdom','priv','unpriv') { |
|
if ($changes{$key}) { |
|
$resulttext .= '<li>'.$titles{$key}.':<ul>'; |
|
if ($key eq 'approval') { |
|
if (keys(%{$privacyhash{$key}{instdom}})) { |
|
$resulttext .= '<li>'.$titles{'instdom'}.'<ul>'; |
|
foreach my $item (@items) { |
|
$resulttext .= '<li>'.$roles{$item}.': '.$titles{$privacyhash{$key}{instdom}{$item}}.'</li>'; |
|
} |
|
$resulttext .= '</ul></li>'; |
|
} |
|
if (keys(%{$privacyhash{$key}{extdom}})) { |
|
$resulttext .= '<li>'.$titles{'extdom'}.'<ul>'; |
|
foreach my $item (@items) { |
|
$resulttext .= '<li>'.$roles{$item}.': '.$titles{$privacyhash{$key}{extdom}{$item}}.'</li>'; |
|
} |
|
$resulttext .= '</ul></li>'; |
|
} |
|
} elsif ($key eq 'othdom') { |
|
my @statuses; |
|
if (ref($types) eq 'ARRAY') { |
|
@statuses = @{$types}; |
|
} |
|
if (ref($privacyhash{$key}) eq 'HASH') { |
|
foreach my $status (@statuses,'default') { |
|
if ($status eq 'default') { |
|
$resulttext .= '<li>'.$othertitle.': '; |
|
} elsif (ref($usertypes) eq 'HASH') { |
|
$resulttext .= '<li>'.$usertypes->{$status}.': '; |
|
} else { |
|
next; |
|
} |
|
if (ref($privacyhash{$key}{$status}) eq 'HASH') { |
|
if (keys(%{$privacyhash{$key}{$status}})) { |
|
$resulttext .= join(', ', map { $fieldnames{$_}; } (sort(keys(%{$privacyhash{$key}{$status}})))); |
|
} else { |
|
$resulttext .= &mt('none'); |
|
} |
|
} |
|
$resulttext .= '</li>'; |
|
} |
|
} |
|
} else { |
|
foreach my $item (@items) { |
|
if (ref($privacyhash{$key}{$item}) eq 'HASH') { |
|
$resulttext .= '<li>'.$names{$item}.': '; |
|
if (keys(%{$privacyhash{$key}{$item}})) { |
|
$resulttext .= join(', ', map { $fieldnames{$_}; } (sort(keys(%{$privacyhash{$key}{$item}})))); |
|
} else { |
|
$resulttext .= &mt('none'); |
|
} |
|
$resulttext .= '</li>'; |
|
} |
|
} |
|
} |
|
$resulttext .= '</ul></li>'; |
|
} |
|
} |
|
} else { |
|
$resulttext = &mt('No changes made to user information settings'); |
|
} |
|
} else { |
|
$resulttext = '<span class="LC_error">'. |
|
&mt('An error occurred: [_1]',$putresult).'</span>'; |
|
} |
|
return $resulttext; |
|
} |
|
|
sub modify_passwords { |
sub modify_passwords { |
my ($r,$dom,$confname,$lastactref,%domconfig) = @_; |
my ($r,$dom,$confname,$lastactref,%domconfig) = @_; |
my ($resulttext,%current,%changes,%newvalues,@oktypes,$errors,$updatedefaults); |
my ($resulttext,%current,%changes,%newvalues,@oktypes,$errors, |
|
$updatedefaults,$updateconf); |
my $customfn = 'resetpw.html'; |
my $customfn = 'resetpw.html'; |
if (ref($domconfig{'passwords'}) eq 'HASH') { |
if (ref($domconfig{'passwords'}) eq 'HASH') { |
%current = %{$domconfig{'passwords'}}; |
%current = %{$domconfig{'passwords'}}; |
Line 13983 sub modify_passwords {
|
Line 14527 sub modify_passwords {
|
max => 'Maximum password length', |
max => 'Maximum password length', |
chars => 'Required characters', |
chars => 'Required characters', |
expire => 'Password expiration (days)', |
expire => 'Password expiration (days)', |
|
numsaved => 'Number of previous passwords to save', |
reset => 'Resetting Forgotten Password', |
reset => 'Resetting Forgotten Password', |
intauth => 'Encryption of Stored Passwords (Internal Auth)', |
intauth => 'Encryption of Stored Passwords (Internal Auth)', |
rules => 'Rules for LON-CAPA Passwords', |
rules => 'Rules for LON-CAPA Passwords', |
Line 14012 sub modify_passwords {
|
Line 14557 sub modify_passwords {
|
'intauth_cost' => 10, |
'intauth_cost' => 10, |
'intauth_check' => 0, |
'intauth_check' => 0, |
'intauth_switch' => 0, |
'intauth_switch' => 0, |
'min' => 7, |
|
); |
); |
|
$staticdefaults{'min'} = $Apache::lonnet::passwdmin; |
foreach my $type (@oktypes) { |
foreach my $type (@oktypes) { |
$staticdefaults{'resetpostlink'}{$type} = ['email','username']; |
$staticdefaults{'resetpostlink'}{$type} = ['email','username']; |
} |
} |
Line 14025 sub modify_passwords {
|
Line 14570 sub modify_passwords {
|
if ($current{'resetlink'} ne $linklife) { |
if ($current{'resetlink'} ne $linklife) { |
$changes{'reset'} = 1; |
$changes{'reset'} = 1; |
} |
} |
} elsif (!exists($domconfig{passwords})) { |
} elsif (!ref($domconfig{passwords}) eq 'HASH') { |
if ($staticdefaults{'resetlink'} ne $linklife) { |
if ($staticdefaults{'resetlink'} ne $linklife) { |
$changes{'reset'} = 1; |
$changes{'reset'} = 1; |
} |
} |
Line 14046 sub modify_passwords {
|
Line 14591 sub modify_passwords {
|
if (@diffs > 0) { |
if (@diffs > 0) { |
$changes{'reset'} = 1; |
$changes{'reset'} = 1; |
} |
} |
} elsif (!exists($domconfig{passwords})) { |
} elsif (!ref($domconfig{passwords}) eq 'HASH') { |
my @diffs = &Apache::loncommon::compare_arrays($staticdefaults{'resetcase'},\@casesens); |
my @diffs = &Apache::loncommon::compare_arrays($staticdefaults{'resetcase'},\@casesens); |
if (@diffs > 0) { |
if (@diffs > 0) { |
$changes{'reset'} = 1; |
$changes{'reset'} = 1; |
Line 14058 sub modify_passwords {
|
Line 14603 sub modify_passwords {
|
if ($current{'resetprelink'} ne $newvalues{'resetprelink'}) { |
if ($current{'resetprelink'} ne $newvalues{'resetprelink'}) { |
$changes{'reset'} = 1; |
$changes{'reset'} = 1; |
} |
} |
} elsif (!exists($domconfig{passwords})) { |
} elsif (!ref($domconfig{passwords}) eq 'HASH') { |
if ($staticdefaults{'resetprelink'} ne $newvalues{'resetprelink'}) { |
if ($staticdefaults{'resetprelink'} ne $newvalues{'resetprelink'}) { |
$changes{'reset'} = 1; |
$changes{'reset'} = 1; |
} |
} |
Line 14085 sub modify_passwords {
|
Line 14630 sub modify_passwords {
|
} else { |
} else { |
$changes{'reset'} = 1; |
$changes{'reset'} = 1; |
} |
} |
} elsif (!exists($domconfig{passwords})) { |
} elsif (!ref($domconfig{passwords}) eq 'HASH') { |
my @diffs = &Apache::loncommon::compare_arrays($staticdefaults{'resetpostlink'}{$type},\@postlink); |
my @diffs = &Apache::loncommon::compare_arrays($staticdefaults{'resetpostlink'}{$type},\@postlink); |
if (@diffs > 0) { |
if (@diffs > 0) { |
$changes{'reset'} = 1; |
$changes{'reset'} = 1; |
Line 14107 sub modify_passwords {
|
Line 14652 sub modify_passwords {
|
if (@diffs > 0) { |
if (@diffs > 0) { |
$changes{'reset'} = 1; |
$changes{'reset'} = 1; |
} |
} |
} elsif (!exists($domconfig{passwords})) { |
} elsif (!ref($domconfig{passwords}) eq 'HASH') { |
my @diffs = &Apache::loncommon::compare_arrays($staticdefaults{'resetemail'},\@resetemail); |
my @diffs = &Apache::loncommon::compare_arrays($staticdefaults{'resetemail'},\@resetemail); |
if (@diffs > 0) { |
if (@diffs > 0) { |
$changes{'reset'} = 1; |
$changes{'reset'} = 1; |
Line 14190 sub modify_passwords {
|
Line 14735 sub modify_passwords {
|
$updatedefaults = 1; |
$updatedefaults = 1; |
} |
} |
} |
} |
foreach my $rule ('min','max','expire') { |
foreach my $rule ('min','max','expire','numsaved') { |
$env{'form.passwords_'.$rule} =~ s/^\s+|\s+$//g; |
$env{'form.passwords_'.$rule} =~ s/^\s+|\s+$//g; |
if ($env{'form.passwords_'.$rule} =~ /^(|\d+(|\.\d*))$/) { |
my $ruleok; |
|
if ($rule eq 'expire') { |
|
if (($env{'form.passwords_'.$rule} =~ /^\d+(|\.\d*)$/) && |
|
($env{'form.passwords_'.$rule} ne '0')) { |
|
$ruleok = 1; |
|
} |
|
} elsif ($rule eq 'min') { |
|
if ($env{'form.passwords_'.$rule} =~ /^\d+$/) { |
|
if ($env{'form.passwords_'.$rule} >= $Apache::lonnet::passwdmin) { |
|
$ruleok = 1; |
|
} |
|
} |
|
} elsif (($env{'form.passwords_'.$rule} =~ /^\d+$/) && |
|
($env{'form.passwords_'.$rule} ne '0')) { |
|
$ruleok = 1; |
|
} |
|
if ($ruleok) { |
$newvalues{$rule} = $env{'form.passwords_'.$rule}; |
$newvalues{$rule} = $env{'form.passwords_'.$rule}; |
if (exists($current{$rule})) { |
if (exists($current{$rule})) { |
if ($newvalues{$rule} ne $current{$rule}) { |
if ($newvalues{$rule} ne $current{$rule}) { |
Line 14227 sub modify_passwords {
|
Line 14788 sub modify_passwords {
|
} |
} |
} |
} |
} |
} |
if ($env{'form.passwords_crsowner'}) { |
my %crsownerchg = ( |
$newvalues{'crsownerchg'} = 1; |
by => [], |
unless ($current{'crsownerchg'}) { |
for => [], |
$changes{'crsownerchg'} = 1; |
); |
|
foreach my $item ('by','for') { |
|
my @posstypes = &Apache::loncommon::get_env_multiple('form.passwords_crsowner_'.$item); |
|
foreach my $type (sort(@posstypes)) { |
|
if (grep(/^\Q$type\E$/,@oktypes)) { |
|
push(@{$crsownerchg{$item}},$type); |
|
} |
|
} |
|
} |
|
$newvalues{'crsownerchg'} = \%crsownerchg; |
|
if (ref($current{'crsownerchg'}) eq 'HASH') { |
|
foreach my $item ('by','for') { |
|
if (ref($current{'crsownerchg'}{$item}) eq 'ARRAY') { |
|
my @diffs = &Apache::loncommon::compare_arrays($current{'crsownerchg'}{$item},$crsownerchg{$item}); |
|
if (@diffs > 0) { |
|
$changes{'crsownerchg'} = 1; |
|
last; |
|
} |
|
} |
|
} |
|
} elsif (!(ref($domconfig{passwords}) eq 'HASH')) { |
|
foreach my $item ('by','for') { |
|
if (@{$crsownerchg{$item}} > 0) { |
|
$changes{'crsownerchg'} = 1; |
|
last; |
|
} |
} |
} |
} elsif ($current{'crsownerchg'}) { |
|
$changes{'crsownerchg'} = 1; |
|
} |
} |
|
|
my %confighash = ( |
my %confighash = ( |
Line 14248 sub modify_passwords {
|
Line 14832 sub modify_passwords {
|
$resulttext = &mt('Changes made: ').'<ul>'; |
$resulttext = &mt('Changes made: ').'<ul>'; |
foreach my $key ('reset','intauth','rules','crsownerchg') { |
foreach my $key ('reset','intauth','rules','crsownerchg') { |
if ($changes{$key}) { |
if ($changes{$key}) { |
|
unless ($key eq 'intauth') { |
|
$updateconf = 1; |
|
} |
$resulttext .= '<li>'.$titles{$key}.':<ul>'; |
$resulttext .= '<li>'.$titles{$key}.':<ul>'; |
if ($key eq 'reset') { |
if ($key eq 'reset') { |
if ($confighash{'passwords'}{'captcha'} eq 'original') { |
if ($confighash{'passwords'}{'captcha'} eq 'original') { |
$resulttext .= '<li>'.&mt('CAPTCHA validation set to use: original CAPTCHA').'</li>'; |
$resulttext .= '<li>'.&mt('CAPTCHA validation set to use: original CAPTCHA').'</li>'; |
} elsif ($confighash{'passwords'}{'captcha'} eq 'recaptcha') { |
} elsif ($confighash{'passwords'}{'captcha'} eq 'recaptcha') { |
$resulttext .= '<li>'.&mt('CAPTCHA validation set to use: reCAPTCHA').' '. |
$resulttext .= '<li>'.&mt('CAPTCHA validation set to use: reCAPTCHA').' '. |
&mt('version: [_1]',$confighash{'passwords'}{'recaptchaversion'}).'<br />'. |
&mt('version: [_1]',$confighash{'passwords'}{'recaptchaversion'}).'<br />'; |
&mt('Public key: [_1]',$confighash{'passwords'}{'recaptchapub'}).'</br>'. |
if (ref($confighash{'passwords'}{'recaptchakeys'}) eq 'HASH') { |
&mt('Private key: [_1]',$confighash{'passwords'}{'recaptchapriv'}).'</li>'; |
$resulttext .= &mt('Public key: [_1]',$confighash{'passwords'}{'recaptchakeys'}{'public'}).'</br>'. |
|
&mt('Private key: [_1]',$confighash{'passwords'}{'recaptchakeys'}{'private'}).'</li>'; |
|
} |
} else { |
} else { |
$resulttext .= '<li>'.&mt('No CAPTCHA validation').'</li>'; |
$resulttext .= '<li>'.&mt('No CAPTCHA validation').'</li>'; |
} |
} |
Line 14335 sub modify_passwords {
|
Line 14924 sub modify_passwords {
|
} |
} |
if ($confighash{'passwords'}{'resetcustom'}) { |
if ($confighash{'passwords'}{'resetcustom'}) { |
my $customlink = &Apache::loncommon::modal_link($confighash{'passwords'}{'resetcustom'}, |
my $customlink = &Apache::loncommon::modal_link($confighash{'passwords'}{'resetcustom'}, |
$titles{custom},600,500); |
&mt('custom text'),600,500,undef,undef, |
$resulttext .= '<li>'.&mt('Preamble to "Forgot Password" form includes [_1]',$customlink).'</li>'; |
undef,undef,'background-color:#ffffff'); |
|
$resulttext .= '<li>'.&mt('Preamble to "Forgot Password" form includes: [_1]',$customlink).'</li>'; |
} else { |
} else { |
$resulttext .= '<li>'.&mt('No custom text included in preamble to "Forgot Password" form').'</li>'; |
$resulttext .= '<li>'.&mt('No custom text included in preamble to "Forgot Password" form').'</li>'; |
} |
} |
Line 14369 sub modify_passwords {
|
Line 14959 sub modify_passwords {
|
$resulttext .= '<li>'.&mt('[_1] set to "[_2]"',$titles{$key.'_'.$item},$value).'</li>'; |
$resulttext .= '<li>'.&mt('[_1] set to "[_2]"',$titles{$key.'_'.$item},$value).'</li>'; |
} |
} |
} elsif ($key eq 'rules') { |
} elsif ($key eq 'rules') { |
foreach my $rule ('min','max','expire') { |
foreach my $rule ('min','max','expire','numsaved') { |
if ($confighash{'passwords'}{$rule} eq '') { |
if ($confighash{'passwords'}{$rule} eq '') { |
$resulttext .= '<li>'.&mt('[_1] not set.',$titles{$rule}); |
|
if ($rule eq 'min') { |
if ($rule eq 'min') { |
$resulttext .= ' '.&mt('Default of 7 will be used'); |
$resulttext .= '<li>'.&mt('[_1] not set.',$titles{$rule}); |
|
' '.&mt('Default of [_1] will be used', |
|
$Apache::lonnet::passwdmin).'</li>'; |
|
} else { |
|
$resulttext .= '<li>'.&mt('[_1] set to none',$titles{$rule}).'</li>'; |
} |
} |
$resulttext .= '</li>'; |
|
} else { |
} else { |
$resulttext .= '<li>'.&mt('[_1] set to [_2]',$titles{$rule},$confighash{'passwords'}{$rule}).'</li>'; |
$resulttext .= '<li>'.&mt('[_1] set to [_2]',$titles{$rule},$confighash{'passwords'}{$rule}).'</li>'; |
} |
} |
} |
} |
} elsif ($key eq 'crsownerchg') { |
} elsif ($key eq 'crsownerchg') { |
if ($confighash{'passwords'}{'crsownerchg'}) { |
if (ref($confighash{'passwords'}{'crsownerchg'}) eq 'HASH') { |
$resulttext .= '<li>'.&mt('Course owner may change student passwords.').'</li>'; |
if ((@{$confighash{'passwords'}{'crsownerchg'}{'by'}} == 0) || |
|
(@{$confighash{'passwords'}{'crsownerchg'}{'for'}} == 0)) { |
|
$resulttext .= '<li>'.&mt('Course owner may not change student passwords.').'</li>'; |
|
} else { |
|
my %crsownerstr; |
|
foreach my $item ('by','for') { |
|
if (ref($confighash{'passwords'}{'crsownerchg'}{$item}) eq 'ARRAY') { |
|
foreach my $type (@{$confighash{'passwords'}{'crsownerchg'}{$item}}) { |
|
if ($type eq 'default') { |
|
$crsownerstr{$item} .= $othertitle.', '; |
|
} elsif ($usertypes->{$type} ne '') { |
|
$crsownerstr{$item} .= $usertypes->{$type}.', '; |
|
} |
|
} |
|
$crsownerstr{$item} =~ s/\Q, \E$//; |
|
} |
|
} |
|
$resulttext .= '<li>'.&mt('Course owner (with status: [_1]) may change passwords for students (with status: [_2]).', |
|
$crsownerstr{'by'},$crsownerstr{'for'}).'</li>'; |
|
} |
} else { |
} else { |
$resulttext .= '<li>'.&mt('Course owner may not change student passwords.'); |
$resulttext .= '<li>'.&mt('Course owner may not change student passwords.').'</li>'; |
} |
} |
} |
} |
$resulttext .= '</ul></li>'; |
$resulttext .= '</ul></li>'; |
Line 14394 sub modify_passwords {
|
Line 15005 sub modify_passwords {
|
} else { |
} else { |
$resulttext = &mt('No changes made to password settings'); |
$resulttext = &mt('No changes made to password settings'); |
} |
} |
|
my $cachetime = 24*60*60; |
if ($updatedefaults) { |
if ($updatedefaults) { |
my $cachetime = 24*60*60; |
|
&Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); |
&Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); |
if (ref($lastactref) eq 'HASH') { |
if (ref($lastactref) eq 'HASH') { |
$lastactref->{'domdefaults'} = 1; |
$lastactref->{'domdefaults'} = 1; |
} |
} |
} |
} |
|
if ($updateconf) { |
|
&Apache::lonnet::do_cache_new('passwdconf',$dom,$confighash{'passwords'},$cachetime); |
|
if (ref($lastactref) eq 'HASH') { |
|
$lastactref->{'passwdconf'} = 1; |
|
} |
|
} |
} else { |
} else { |
$resulttext = '<span class="LC_error">'. |
$resulttext = '<span class="LC_error">'. |
&mt('An error occurred: [_1]',$putresult).'</span>'; |
&mt('An error occurred: [_1]',$putresult).'</span>'; |
Line 15225 sub modify_selfcreation {
|
Line 15842 sub modify_selfcreation {
|
$chgtext .= &mt('For self-created accounts verified by e-mail address, username is set as follows:'). |
$chgtext .= &mt('For self-created accounts verified by e-mail address, username is set as follows:'). |
'<ul>'; |
'<ul>'; |
foreach my $status (@statuses) { |
foreach my $status (@statuses) { |
if ($type eq 'default') { |
if ($status eq 'default') { |
$chgtext .= '<li>'.$othertitle.' -- '.$options{$cancreate{'emailverified'}{$status}}.'</li>'; |
$chgtext .= '<li>'.$othertitle.' -- '.$options{$cancreate{'emailverified'}{$status}}.'</li>'; |
} else { |
} else { |
$chgtext .= '<li>'.$usertypes{$status}.' -- '.$options{$cancreate{'emailverified'}{$status}}.'</li>'; |
$chgtext .= '<li>'.$usertypes{$status}.' -- '.$options{$cancreate{'emailverified'}{$status}}.'</li>'; |
Line 15494 sub modify_selfcreation {
|
Line 16111 sub modify_selfcreation {
|
} |
} |
|
|
sub process_captcha { |
sub process_captcha { |
my ($container,$changes,$newsettings,$current) = @_; |
my ($container,$changes,$newsettings,$currsettings) = @_; |
return unless ((ref($changes) eq 'HASH') && (ref($newsettings) eq 'HASH') || (ref($current) eq 'HASH')); |
return unless ((ref($changes) eq 'HASH') && (ref($newsettings) eq 'HASH')); |
$newsettings->{'captcha'} = $env{'form.'.$container.'_captcha'}; |
$newsettings->{'captcha'} = $env{'form.'.$container.'_captcha'}; |
unless ($newsettings->{'captcha'} eq 'recaptcha' || $newsettings->{'captcha'} eq 'notused') { |
unless ($newsettings->{'captcha'} eq 'recaptcha' || $newsettings->{'captcha'} eq 'notused') { |
$newsettings->{'captcha'} = 'original'; |
$newsettings->{'captcha'} = 'original'; |
} |
} |
if ($current->{'captcha'} ne $newsettings->{'captcha'}) { |
my %current; |
|
if (ref($currsettings) eq 'HASH') { |
|
%current = %{$currsettings}; |
|
} |
|
if ($current{'captcha'} ne $newsettings->{'captcha'}) { |
if ($container eq 'cancreate') { |
if ($container eq 'cancreate') { |
if (ref($changes->{'cancreate'}) eq 'ARRAY') { |
if (ref($changes->{'cancreate'}) eq 'ARRAY') { |
push(@{$changes->{'cancreate'}},'captcha'); |
push(@{$changes->{'cancreate'}},'captcha'); |
} elsif (!defined($changes->{'cancreate'})) { |
} elsif (!defined($changes->{'cancreate'})) { |
$changes->{'cancreate'} = ['captcha']; |
$changes->{'cancreate'} = ['captcha']; |
} |
} |
|
} elsif ($container eq 'passwords') { |
|
$changes->{'reset'} = 1; |
} else { |
} else { |
$changes->{'captcha'} = 1; |
$changes->{'captcha'} = 1; |
} |
} |
Line 15528 sub process_captcha {
|
Line 16151 sub process_captcha {
|
} |
} |
$newsettings->{'recaptchaversion'} = $newversion; |
$newsettings->{'recaptchaversion'} = $newversion; |
} |
} |
if (ref($current->{'recaptchakeys'}) eq 'HASH') { |
if (ref($current{'recaptchakeys'}) eq 'HASH') { |
$currpub = $current->{'recaptchakeys'}{'public'}; |
$currpub = $current{'recaptchakeys'}{'public'}; |
$currpriv = $current->{'recaptchakeys'}{'private'}; |
$currpriv = $current{'recaptchakeys'}{'private'}; |
unless ($newsettings->{'captcha'} eq 'recaptcha') { |
unless ($newsettings->{'captcha'} eq 'recaptcha') { |
$newsettings->{'recaptchakeys'} = { |
$newsettings->{'recaptchakeys'} = { |
public => '', |
public => '', |
Line 15538 sub process_captcha {
|
Line 16161 sub process_captcha {
|
} |
} |
} |
} |
} |
} |
if ($current->{'captcha'} eq 'recaptcha') { |
if ($current{'captcha'} eq 'recaptcha') { |
$currversion = $current->{'recaptchaversion'}; |
$currversion = $current{'recaptchaversion'}; |
if ($currversion ne '2') { |
if ($currversion ne '2') { |
$currversion = 1; |
$currversion = 1; |
} |
} |
Line 15551 sub process_captcha {
|
Line 16174 sub process_captcha {
|
} elsif (!defined($changes->{'cancreate'})) { |
} elsif (!defined($changes->{'cancreate'})) { |
$changes->{'cancreate'} = ['recaptchaversion']; |
$changes->{'cancreate'} = ['recaptchaversion']; |
} |
} |
|
} elsif ($container eq 'passwords') { |
|
$changes->{'reset'} = 1; |
} else { |
} else { |
$changes->{'recaptchaversion'} = 1; |
$changes->{'recaptchaversion'} = 1; |
} |
} |
Line 15562 sub process_captcha {
|
Line 16187 sub process_captcha {
|
} elsif (!defined($changes->{'cancreate'})) { |
} elsif (!defined($changes->{'cancreate'})) { |
$changes->{'cancreate'} = ['recaptchakeys']; |
$changes->{'cancreate'} = ['recaptchakeys']; |
} |
} |
|
} elsif ($container eq 'passwords') { |
|
$changes->{'reset'} = 1; |
} else { |
} else { |
$changes->{'recaptchakeys'} = 1; |
$changes->{'recaptchakeys'} = 1; |
} |
} |
Line 16357 sub modify_coursecategories {
|
Line 16984 sub modify_coursecategories {
|
} |
} |
$resulttext .= '</ul></li>'; |
$resulttext .= '</ul></li>'; |
} |
} |
|
&Apache::lonnet::do_cache_new('cats',$dom,$cathash,3600); |
|
if (ref($lastactref) eq 'HASH') { |
|
$lastactref->{'cats'} = 1; |
|
} |
} |
} |
$resulttext .= '</ul>'; |
$resulttext .= '</ul>'; |
if ($changes{'unauth'} || $changes{'auth'}) { |
if ($changes{'unauth'} || $changes{'auth'}) { |
Line 19136 sub devalidate_remote_domconfs {
|
Line 19767 sub devalidate_remote_domconfs {
|
my %servers = &Apache::lonnet::internet_dom_servers($dom); |
my %servers = &Apache::lonnet::internet_dom_servers($dom); |
my %thismachine; |
my %thismachine; |
map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids(); |
map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids(); |
my @posscached = ('domainconfig','domdefaults','ltitools','usersessions','directorysrch'); |
my @posscached = ('domainconfig','domdefaults','ltitools','usersessions', |
|
'directorysrch','passwdconf','cats'); |
if (keys(%servers)) { |
if (keys(%servers)) { |
foreach my $server (keys(%servers)) { |
foreach my $server (keys(%servers)) { |
next if ($thismachine{$server}); |
next if ($thismachine{$server}); |