version 1.231, 2019/04/24 21:15:48
|
version 1.240, 2022/08/19 18:56:41
|
Line 363 $options.'
|
Line 363 $options.'
|
&Apache::lonhtmlcommon::row_closure(1). |
&Apache::lonhtmlcommon::row_closure(1). |
&Apache::lonhtmlcommon::end_pick_box().' |
&Apache::lonhtmlcommon::end_pick_box().' |
</div>'); |
</div>'); |
if ($roles_check_list) { |
if ($roles_check_list) { |
$r->print('<div class="LC_left_float"> |
$r->print('<div class="LC_left_float"> |
<h4>'.&mt('Freeze Roles').'</h4> |
<h4>'.&mt('Freeze Roles').'</h4> |
<p>'.&mt('The table below can be used to [_1]freeze[_2] '.$lc_role.'s in the Hotlist.','<q>','</q>').'<br />'. |
<p>'.&mt('The table below can be used to [_1]freeze[_2] '.$lc_role.'s in the Hotlist.','<q>','</q>').'<br />'. |
Line 627 sub icon_options {
|
Line 627 sub icon_options {
|
} |
} |
|
|
sub icon_previews { |
sub icon_previews { |
my %icon_text = ( |
my %icon_text = &Apache::lonlocal::texthash ( |
annotate => 'Notes', |
annotate => 'Notes', |
wishlist => 'Stored Links', |
wishlist => 'Stored Links', |
catalog => 'Info', |
catalog => 'Info', |
Line 636 sub icon_previews {
|
Line 636 sub icon_previews {
|
printout => 'Print', |
printout => 'Print', |
); |
); |
my %inlinetools = ( |
my %inlinetools = ( |
printout => "s&8&3&prt.png&$icon_text{'printout'}&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document", |
printout => "s&8&3&prt.png&$icon_text{'printout'}&printout[_1]&gopost('/adm/printout',currentURL)&".&mt('Prepare a printable document'), |
wishlist => "s&9&1&wishlist-link.png&$icon_text{'wishlist'}&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository", |
wishlist => "s&9&1&wishlist-link.png&$icon_text{'wishlist'}&wishlistlink[_2]&set_wishlistlink()&".&mt('Save a link for this resource in your personal Stored Links repository'), |
evaluate => "s&8&1&eval.png&$icon_text{'evaluate'}&this[_1]&gopost('/adm/evaluate',currentURL,1)&Provide my evaluation of this resource", |
evaluate => "s&8&1&eval.png&$icon_text{'evaluate'}&this[_1]&gopost('/adm/evaluate',currentURL,1)&".&mt('Provide my evaluation of this resource'), |
feedback => "s&8&2&fdbk.png&$icon_text{'feedback'}&discuss[_1]&gopost('/adm/feedback',currentURL,1)&Provide feedback messages or contribute to the course discussion about this resource", |
feedback => "s&8&2&fdbk.png&$icon_text{'feedback'}&discuss[_1]&gopost('/adm/feedback',currentURL,1)&".&mt('Provide feedback messages or contribute to the course discussion about this resource'), |
annotate => "s&9&3&anot.png&$icon_text{'annotate'}&tations[_1]&annotate()&Make notes and annotations about this resource", |
annotate => "s&9&3&anot.png&$icon_text{'annotate'}&tations[_1]&annotate()&".&mt('Make notes and annotations about this resource'), |
catalog => "s&6&3&catalog.png&$icon_text{'catalog'}&info[_1]&catalog_info()&Show Metadata", |
catalog => "s&6&3&catalog.png&$icon_text{'catalog'}&info[_1]&catalog_info()&".&mt('Show Metadata'), |
); |
); |
my @toolsorder = qw(annotate wishlist evaluate feedback printout catalog); |
my @toolsorder = qw(annotate wishlist evaluate feedback printout catalog); |
return (\%inlinetools,\@toolsorder); |
return (\%inlinetools,\@toolsorder); |
Line 1265 sub passwordchanger {
|
Line 1265 sub passwordchanger {
|
# This function is a bit of a mess.... |
# This function is a bit of a mess.... |
# Passwords are encrypted using londes.js (DES encryption) |
# Passwords are encrypted using londes.js (DES encryption) |
$errormessage = ($errormessage || ''); |
$errormessage = ($errormessage || ''); |
my ($user,$domain,$currentpass); |
my ($user,$domain,$currentpass,$clientip); |
|
$clientip = &Apache::lonnet::get_requestor_ip($r); |
&Apache::lonhtmlcommon::add_breadcrumb( |
&Apache::lonhtmlcommon::add_breadcrumb( |
{ href => '/adm/preferences?action=changepass', |
{ href => '/adm/preferences?action=changepass', |
text => 'Change Password'}); |
text => 'Change Password'}); |
Line 1273 sub passwordchanger {
|
Line 1274 sub passwordchanger {
|
$r->print(Apache::loncommon::start_page('Personal Data')); |
$r->print(Apache::loncommon::start_page('Personal Data')); |
$r->print(Apache::lonhtmlcommon::breadcrumbs('Change Password')); |
$r->print(Apache::lonhtmlcommon::breadcrumbs('Change Password')); |
} |
} |
my ($blocked,$blocktext) = |
|
&Apache::loncommon::blocking_status('passwd'); |
|
if ($blocked) { |
|
$r->print('<p class="LC_warning">'.$blocktext.'</p>'); |
|
return; |
|
} |
|
if ((!defined($caller)) || ($caller eq 'preferences')) { |
if ((!defined($caller)) || ($caller eq 'preferences')) { |
$user = $env{'user.name'}; |
$user = $env{'user.name'}; |
$domain = $env{'user.domain'}; |
$domain = $env{'user.domain'}; |
if (!defined($caller)) { |
if (!defined($caller)) { |
$caller = 'preferences'; |
$caller = 'preferences'; |
} |
} |
|
my ($blocked,$blocktext) = |
|
&Apache::loncommon::blocking_status('passwd',$clientip); |
|
if ($blocked) { |
|
$r->print('<p class="LC_warning">'.$blocktext.'</p>'); |
|
return; |
|
} |
} elsif ($caller eq 'reset_by_email') { |
} elsif ($caller eq 'reset_by_email') { |
my %data = &Apache::lonnet::tmpget($mailtoken); |
my %data = &Apache::lonnet::tmpget($mailtoken); |
if (keys(%data) == 0) { |
if (keys(%data) == 0) { |
Line 1301 sub passwordchanger {
|
Line 1302 sub passwordchanger {
|
$user = $data{'username'}; |
$user = $data{'username'}; |
$domain = $data{'domain'}; |
$domain = $data{'domain'}; |
$currentpass = $data{'temppasswd'}; |
$currentpass = $data{'temppasswd'}; |
|
my ($blocked,$blocktext) = |
|
&Apache::loncommon::blocking_status('passwd',$clientip,$user,$domain); |
|
if ($blocked) { |
|
$r->print('<p class="LC_warning">'.$blocktext.'</p>'); |
|
return; |
|
} |
} else { |
} else { |
$r->print( |
$r->print( |
'<p class="LC_warning">' |
'<p class="LC_warning">' |
Line 1360 sub passwordchanger {
|
Line 1367 sub passwordchanger {
|
my $jsh=Apache::File->new($include."/londes.js"); |
my $jsh=Apache::File->new($include."/londes.js"); |
$r->print(<$jsh>); |
$r->print(<$jsh>); |
} |
} |
$r->print(&jscript_send($caller,$extrafields)); |
$r->print(&jscript_send($caller,$domain,$currentauth,$extrafields)); |
$r->print(<<ENDFORM); |
$r->print(<<ENDFORM); |
$errormessage |
$errormessage |
|
|
Line 1377 ENDFORM
|
Line 1384 ENDFORM
|
} |
} |
|
|
sub jscript_send { |
sub jscript_send { |
my ($caller,$extrafields) = @_; |
my ($caller,$domain,$currentauth,$extrafields) = @_; |
|
my ($min,$max,$rulestr,$numrules); |
|
$min = $Apache::lonnet::passwdmin; |
|
my %js_lt = &Apache::lonlocal::texthash( |
|
uc => 'New password needs at least one upper case letter', |
|
lc => 'New password needs at least one lower case letter', |
|
num => 'New password needs at least one number', |
|
spec => 'New password needs at least one non-alphanumeric', |
|
blank1 => 'Empty Password field', |
|
blank2 => 'Empty Confirm Password field', |
|
mismatch => 'Contents of Password and Confirm Password fields must match', |
|
fail => 'Please fix the following:', |
|
); |
|
&js_escape(\%js_lt); |
|
if ($currentauth eq 'internal:') { |
|
if ($domain ne '') { |
|
my %passwdconf = &Apache::lonnet::get_passwdconf($domain); |
|
if (keys(%passwdconf)) { |
|
if ($passwdconf{min}) { |
|
$min = $passwdconf{min}; |
|
} |
|
if ($passwdconf{max}) { |
|
$max = $passwdconf{max}; |
|
$js_lt{'long'} = &js_escape(&mt('Maximum password length: [_1]',$max)); |
|
} |
|
if (ref($passwdconf{chars}) eq 'ARRAY') { |
|
if (@{$passwdconf{chars}}) { |
|
$rulestr = join('","',@{$passwdconf{chars}}); |
|
$numrules = scalar(@{$passwdconf{chars}}); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
$js_lt{'short'} = &js_escape(&mt('Minimum password length: [_1]',$min)); |
|
|
|
my $passwdcheck = <<"ENDJS"; |
|
var errors = new Array(); |
|
var min = parseInt("$min") || 0; |
|
var currauth = "$currentauth"; |
|
if (this.document.client.elements.newpass_1.value == '') { |
|
errors.push("$js_lt{'blank1'}"); |
|
} |
|
if (this.document.client.elements.newpass_2.value == '') { |
|
errors.push("$js_lt{'blank2'}"); |
|
} |
|
if (errors.length == 0) { |
|
if (this.document.client.elements.newpass_1.value != this.document.client.elements.newpass_2.value) { |
|
errors.push("$js_lt{'mismatch'}"); |
|
} |
|
var posspass = this.document.client.elements.newpass_1.value; |
|
if (min > 0) { |
|
if (posspass.length < min) { |
|
errors.push("$js_lt{'short'}"); |
|
} |
|
} |
|
if (currauth == 'internal:') { |
|
var max = parseInt("$max") || 0; |
|
if (max > 0) { |
|
if (posspass.length > max) { |
|
errors.push("$js_lt{'long'}"); |
|
} |
|
} |
|
var numrules = parseInt("$numrules") || 0; |
|
if (numrules > 0) { |
|
var rules = new Array("$rulestr"); |
|
for (var i=0; i<rules.length; i++) { |
|
if (rules[i] == 'uc') { |
|
if (!posspass.match(/[A-Z]/)) { |
|
errors.push("$js_lt{'uc'}"); |
|
} |
|
} else if (rules[i] == 'lc') { |
|
if (!posspass.match(/[a-z]/)) { |
|
errors.push("$js_lt{'lc'}"); |
|
} |
|
} else if (rules[i] == 'num') { |
|
if (!posspass.match(/\\d/)) { |
|
errors.push("$js_lt{'num'}"); |
|
} |
|
} else if (rules[i] == 'spec') { |
|
var pattern = /^[!@#$%^&*()_+\\-=\\[\\]{};':"\\\|,.<a>\\/?]/; |
|
if (!posspass.match(pattern)) { |
|
errors.push("$js_lt{'spec'}"); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if (errors.length > 0) { |
|
alert("$js_lt{'fail'}"+"\\n\\n"+errors.join("\\n")); |
|
return; |
|
} |
|
ENDJS |
my $output = qq| |
my $output = qq| |
<script type="text/javascript" language="JavaScript"> |
<script type="text/javascript" language="JavaScript"> |
|
|
function send() { |
function send() { |
|
$passwdcheck |
uextkey=this.document.client.elements.ukey_cpass.value; |
uextkey=this.document.client.elements.ukey_cpass.value; |
lextkey=this.document.client.elements.lkey_cpass.value; |
lextkey=this.document.client.elements.lkey_cpass.value; |
initkeys(); |
initkeys(); |
Line 1408 sub jscript_send {
|
Line 1509 sub jscript_send {
|
|; |
|; |
} |
} |
if ((ref($extrafields) eq 'HASH') && ($extrafields->{'email'})) { |
if ((ref($extrafields) eq 'HASH') && ($extrafields->{'email'})) { |
$output .= qq| |
$output .= qq| |
this.document.pserver.elements.email.value = |
this.document.pserver.elements.email.value = |
this.document.client.elements.email.value; |
this.document.client.elements.email.value; |
|; |
|; |
Line 1444 sub client_form {
|
Line 1545 sub client_form {
|
.&Apache::lonhtmlcommon::row_closure(); |
.&Apache::lonhtmlcommon::row_closure(); |
} |
} |
if ((ref($extrafields) eq 'HASH') && ($extrafields->{'username'})) { |
if ((ref($extrafields) eq 'HASH') && ($extrafields->{'username'})) { |
$output .= &Apache::lonhtmlcommon::row_title( |
$output .= &Apache::lonhtmlcommon::row_title( |
'<label for="uname">'.$lt{'username'}.'</label>') |
'<label for="uname">'.$lt{'username'}.'</label>') |
.'<input type="text" name="uname" size="20" autocapitalize="off" autocorrect="off" />' |
.'<input type="text" name="uname" size="20" autocapitalize="off" autocorrect="off" />' |
.&Apache::lonhtmlcommon::row_closure() |
.&Apache::lonhtmlcommon::row_closure() |
Line 1522 sub server_form {
|
Line 1623 sub server_form {
|
} |
} |
|
|
sub verify_and_change_password { |
sub verify_and_change_password { |
my ($r,$caller,$mailtoken,$ended) = @_; |
my ($r,$caller,$mailtoken,$timelimit,$extrafields,$ended) = @_; |
my ($user,$domain,$homeserver); |
my ($user,$domain,$homeserver,$clientip); |
my ($blocked,$blocktext) = |
|
&Apache::loncommon::blocking_status('passwd'); |
|
if ($blocked) { |
|
$r->print('<p class="LC_warning">'.$blocktext.'</p>'); |
|
return; |
|
} |
|
if ($caller eq 'reset_by_email') { |
if ($caller eq 'reset_by_email') { |
$user = $env{'form.uname'}; |
$user = $env{'form.uname'}; |
$domain = $env{'form.udom'}; |
$domain = $env{'form.udom'}; |
Line 1538 sub verify_and_change_password {
|
Line 1633 sub verify_and_change_password {
|
if ($homeserver eq 'no_host') { |
if ($homeserver eq 'no_host') { |
&passwordchanger($r,"<p>\n<span class='LC_error'>". |
&passwordchanger($r,"<p>\n<span class='LC_error'>". |
&mt("Invalid username and/or domain")."</span>\n</p>", |
&mt("Invalid username and/or domain")."</span>\n</p>", |
$caller,$mailtoken); |
$caller,$mailtoken,$timelimit,$extrafields); |
return 1; |
return 'no_host'; |
} |
} |
} else { |
} else { |
&passwordchanger($r,"<p>\n<span class='LC_error'>". |
&passwordchanger($r,"<p>\n<span class='LC_error'>". |
&mt("Username and domain were blank")."</span>\n</p>", |
&mt("Username and domain were blank")."</span>\n</p>", |
$caller,$mailtoken); |
$caller,$mailtoken,$timelimit,$extrafields); |
return 1; |
return 'missingdata'; |
} |
} |
} else { |
} else { |
$user = $env{'user.name'}; |
$user = $env{'user.name'}; |
$domain = $env{'user.domain'}; |
$domain = $env{'user.domain'}; |
$homeserver = $env{'user.home'}; |
$homeserver = $env{'user.home'}; |
} |
} |
|
$clientip = &Apache::lonnet::get_requestor_ip($r); |
|
my ($blocked,$blocktext) = |
|
&Apache::loncommon::blocking_status('passwd',$clientip,$user,$domain); |
|
if ($blocked) { |
|
$r->print('<p class="LC_warning">'.$blocktext.'</p>'); |
|
if ($caller eq 'reset_by_email') { |
|
return 'blocked'; |
|
} else { |
|
return; |
|
} |
|
} |
my $currentauth=&Apache::lonnet::queryauthenticate($user,$domain); |
my $currentauth=&Apache::lonnet::queryauthenticate($user,$domain); |
# Check for authentication types that allow changing of the password. |
# Check for authentication types that allow changing of the password. |
if ($currentauth !~ /^(unix|internal):/) { |
if ($currentauth !~ /^(unix|internal):/) { |
Line 1559 sub verify_and_change_password {
|
Line 1665 sub verify_and_change_password {
|
&passwordchanger($r,"<p>\n<span class='LC_error'>". |
&passwordchanger($r,"<p>\n<span class='LC_error'>". |
&mt("Authentication type for this user can not be changed by this mechanism"). |
&mt("Authentication type for this user can not be changed by this mechanism"). |
"</span>\n</p>", |
"</span>\n</p>", |
$caller,$mailtoken); |
$caller,$mailtoken,$timelimit,$extrafields); |
return 1; |
return 'otherauth'; |
} else { |
} else { |
return; |
return; |
} |
} |
Line 1576 sub verify_and_change_password {
|
Line 1682 sub verify_and_change_password {
|
defined($newpass2) ){ |
defined($newpass2) ){ |
&passwordchanger($r,"<p>\n<span class='LC_error'>". |
&passwordchanger($r,"<p>\n<span class='LC_error'>". |
&mt("One or more password fields were blank"). |
&mt("One or more password fields were blank"). |
"</span>\n</p>",$caller,$mailtoken); |
"</span>\n</p>",$caller,$mailtoken,$timelimit,$extrafields); |
return; |
if ($caller eq 'reset_by_email') { |
|
return 'missingdata'; |
|
} else { |
|
return; |
|
} |
} |
} |
# Get the keys |
# Get the keys |
my $lonhost = $r->dir_config('lonHostID'); |
my $lonhost = $r->dir_config('lonHostID'); |
Line 1595 sub verify_and_change_password {
|
Line 1705 sub verify_and_change_password {
|
</p> |
</p> |
ENDERROR |
ENDERROR |
# Probably should log an error here |
# Probably should log an error here |
return 1; |
if ($caller eq 'reset_by_email') { |
|
return 'internalerror'; |
|
} else { |
|
return; |
|
} |
} |
} |
my ($ckey,$n1key,$n2key)=split(/&/,$tmpinfo); |
my ($ckey,$n1key,$n2key)=split(/&/,$tmpinfo); |
# |
# |
Line 1609 ENDERROR
|
Line 1723 ENDERROR
|
&passwordchanger($r, |
&passwordchanger($r, |
'<span class="LC_error">'. |
'<span class="LC_error">'. |
&mt('Could not verify current authentication.').' '. |
&mt('Could not verify current authentication.').' '. |
&mt('Please try again.').'</span>',$caller,$mailtoken); |
&mt('Please try again.').'</span>',$caller,$mailtoken,$timelimit,$extrafields); |
return 1; |
return 'emptydata'; |
} |
} |
if ($currentpass ne $data{'temppasswd'}) { |
if ($currentpass ne $data{'temppasswd'}) { |
&passwordchanger($r, |
&passwordchanger($r, |
'<span class="LC_error">'. |
'<span class="LC_error">'. |
&mt('Could not verify current authentication.').' '. |
&mt('Could not verify current authentication.').' '. |
&mt('Please try again.').'</span>',$caller,$mailtoken); |
&mt('Please try again.').'</span>',$caller,$mailtoken,$timelimit,$extrafields); |
return 1; |
return 'missingtemp'; |
} |
} |
} |
} |
if ($newpass1 ne $newpass2) { |
if ($newpass1 ne $newpass2) { |
&passwordchanger($r, |
&passwordchanger($r, |
'<span class="LC_warning">'. |
'<span class="LC_warning">'. |
&mt('The new passwords you entered do not match.').' '. |
&mt('The new passwords you entered do not match.').' '. |
&mt('Please try again.').'</span>',$caller,$mailtoken); |
&mt('Please try again.').'</span>',$caller,$mailtoken,$timelimit,$extrafields); |
return 1; |
if ($caller eq 'reset_by_email') { |
|
return 'mismatch'; |
|
} else { |
|
return; |
|
} |
} |
} |
if ($currentauth eq 'unix:') { |
if ($currentauth eq 'unix:') { |
if (length($newpass1) < 7) { |
if (length($newpass1) < 7) { |
&passwordchanger($r, |
&passwordchanger($r, |
'<span class="LC_warning">'. |
'<span class="LC_warning">'. |
&mt('Passwords must be a minimum of 7 characters long.').' '. |
&mt('Passwords must be a minimum of 7 characters long.').' '. |
&mt('Please try again.').'</span>',$caller,$mailtoken); |
&mt('Please try again.').'</span>',$caller,$mailtoken,$timelimit,$extrafields); |
return 1; |
if ($caller eq 'reset_by_email') { |
} |
return 'length'; |
} else { |
} else { |
my %passwdconf = &Apache::lonnet::get_passwdconf($domain); |
return; |
my ($min,$max,@chars,@brokerule); |
|
if (ref($passwdconf{'chars'}) eq 'ARRAY') { |
|
if ($passwdconf{'min'} =~ /^\d+$/) { |
|
$min = $passwdconf{'min'}; |
|
} |
|
if ($passwdconf{'max'} =~ /^\d+$/) { |
|
$max = $passwdconf{'max'}; |
|
} |
|
@chars = @{$passwdconf{'chars'}}; |
|
} else { |
|
$min = 7; |
|
} |
|
if (($min) && (length($newpass1) < $min)) { |
|
push(@brokerule,'min'); |
|
} |
|
if (($max) && (length($newpass1) > $max)) { |
|
push(@brokerule,'max'); |
|
} |
|
if (@chars) { |
|
my %rules; |
|
map { $rules{$_} = 1; } @chars; |
|
if ($rules{'uc'}) { |
|
unless ($newpass1 =~ /[A-Z]/) { |
|
push(@brokerule,'uc'); |
|
} |
|
} |
|
if ($rules{'lc'}) { |
|
unless ($newpass1 =~ /a-z/) { |
|
push(@brokerule,'lc'); |
|
} |
|
} |
|
if ($rules{'num'}) { |
|
unless ($newpass1 =~ /\d/) { |
|
push(@brokerule,'num'); |
|
} |
|
} |
|
if ($rules{'spec'}) { |
|
unless ($newpass1 =~ /[!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/) { |
|
push(@brokerule,'spec'); |
|
} |
|
} |
} |
} |
} |
if (@brokerule) { |
} else { |
my %rulenames = &Apache::lonlocal::texthash( |
my $warning = &Apache::loncommon::check_passwd_rules($domain,$newpass1); |
uc => 'At least one upper case letter', |
if ($warning) { |
lc => 'At least one lower case letter', |
|
num => 'At least one number', |
|
spec => 'At least one non-alphanumeric', |
|
); |
|
$rulenames{'uc'} .= ': ABCDEFGHIJKLMNOPQRSTUVWXYZ'; |
|
$rulenames{'lc'} .= ': abcdefghijklmnopqrstuvwxyz'; |
|
$rulenames{'num'} .= ': 0123456789'; |
|
$rulenames{'spec'} .= ': !"\#$%&\'()*+,-./:;<=>?@[\]^_\`{|}~'; |
|
$rulenames{'min'} = &mt('Minimum password length: [_1]',$min); |
|
$rulenames{'max'} = &mt('Maximum password length: [_1]',$max); |
|
my $warning = &mt('Password did not satisfy the following:').'<ul>'; |
|
foreach my $rule ('min','max','uc','ls','num','spec') { |
|
if (grep(/^$rule$/,@brokerule)) { |
|
$warning .= '<li>'.$rulenames{$rule}.'</li>'; |
|
} |
|
} |
|
$warning .= '</ul>'; |
|
&passwordchanger($r,'<span class="LC_warning">'. |
&passwordchanger($r,'<span class="LC_warning">'. |
$warning. |
$warning. |
&mt('Please try again.').'</span>', |
&mt('Please try again.').'</span>', |
$caller,$mailtoken); |
$caller,$mailtoken,$timelimit,$extrafields); |
return 1; |
if ($caller eq 'reset_by_email') { |
|
return 'rules'; |
|
} else { |
|
return; |
|
} |
} |
} |
} |
} |
# |
# |
Line 1723 ENDERROR
|
Line 1788 ENDERROR
|
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_\`abcdefghijklmnopqrstuvwxyz{|}~ |
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_\`abcdefghijklmnopqrstuvwxyz{|}~ |
</pre></span> |
</pre></span> |
ENDERROR |
ENDERROR |
&passwordchanger($r,$errormessage,$caller,$mailtoken); |
&passwordchanger($r,$errormessage,$caller,$mailtoken,$timelimit,$extrafields); |
return 1; |
if ($caller eq 'reset_by_email') { |
|
return 'badchars'; |
|
} else { |
|
return; |
|
} |
} |
} |
# |
# |
# Change the password (finally) |
# Change the password (finally) |
Line 1747 ENDERROR
|
Line 1816 ENDERROR
|
# error error: run in circles, scream and shout |
# error error: run in circles, scream and shout |
if ($caller eq 'reset_by_email') { |
if ($caller eq 'reset_by_email') { |
if (!$result) { |
if (!$result) { |
return 1; |
return 'error'; |
} else { |
} else { |
return $result; |
return $result; |
} |
} |
} else { |
} else { |
|
my $feedback; |
|
if ($result eq 'prioruse') { |
|
$feedback = &mt('Please enter a password that you have not used recently.'); |
|
} else { |
|
$feedback = &mt('Please make sure your old password was entered correctly.'); |
|
} |
$message = &Apache::lonhtmlcommon::confirm_success( |
$message = &Apache::lonhtmlcommon::confirm_success( |
&mt("The password for user [_1] was not changed.",'<i>'.$user.'</i>').' '.&mt('Please make sure your old password was entered correctly.'),1); |
&mt("The password for user [_1] was not changed.",'<i>'.$user.'</i>').' '.$feedback,1); |
$message=&Apache::loncommon::confirmwrapper($message); |
$message=&Apache::loncommon::confirmwrapper($message); |
&print_main_menu($r, $message); |
&print_main_menu($r, $message); |
if (ref($ended)) { |
if (ref($ended)) { |
Line 2054 sub change_authoring_settings {
|
Line 2129 sub change_authoring_settings {
|
|
|
sub lockednameschanger { |
sub lockednameschanger { |
my $r = shift; |
my $r = shift; |
&Apache::lonhtmlcommon::add_breadcrumb( |
|
{ href => '/adm/preferences?action=changelockednames', |
|
text => 'Automatic name changes'}); |
|
$r->print(Apache::loncommon::start_page('Automatic name changes')); |
|
$r->print(Apache::lonhtmlcommon::breadcrumbs('Allow/disallow name updates')); |
|
my %userenv = &Apache::lonnet::get('environment',['lockedname']); |
my %userenv = &Apache::lonnet::get('environment',['lockedname']); |
my $lockedname=''; |
my $lockedname=''; |
|
my $ended; |
if (&can_toggle_namelocking()) { |
if (&can_toggle_namelocking()) { |
if ($userenv{'lockedname'}) { |
if ($userenv{'lockedname'}) { |
$lockedname = ' checked="checked"'; |
$lockedname = ' checked="checked"'; |
Line 2078 sub lockednameschanger {
|
Line 2149 sub lockednameschanger {
|
} |
} |
} |
} |
if (keys(%updateable)) { |
if (keys(%updateable)) { |
|
&Apache::lonhtmlcommon::add_breadcrumb( |
|
{ href => '/adm/preferences?action=changelockednames', |
|
text => 'Automatic name changes'}); |
|
$r->print(Apache::loncommon::start_page('Automatic name changes')); |
|
$r->print(Apache::lonhtmlcommon::breadcrumbs('Allow/disallow name updates')); |
my %longnames = &Apache::lonlocal::texthash ( |
my %longnames = &Apache::lonlocal::texthash ( |
firstname => 'First Name', |
firstname => 'First Name', |
middlename => 'Middle Name', |
middlename => 'Middle Name', |
Line 2104 ENDSCREEN
|
Line 2180 ENDSCREEN
|
} else { |
} else { |
my $message = &mt('Based on your institutional affiliation no name information is automatically updated for your LON-CAPA account.'); |
my $message = &mt('Based on your institutional affiliation no name information is automatically updated for your LON-CAPA account.'); |
&print_main_menu($r,$message); |
&print_main_menu($r,$message); |
|
$ended = 1; |
} |
} |
} else { |
} else { |
my $message = &mt('You are not permitted to set a user preference for automatic name updates for your LON-CAPA account.'); |
my $message = &mt('You are not permitted to set a user preference for automatic name updates for your LON-CAPA account.'); |
&print_main_menu($r,$message); |
&print_main_menu($r,$message); |
|
$ended = 1; |
} |
} |
|
return $ended; |
} |
} |
|
|
sub verify_and_change_lockednames { |
sub verify_and_change_lockednames { |
Line 2361 sub handler {
|
Line 2440 sub handler {
|
} else { |
} else { |
$brlink ='/adm/preferences'; |
$brlink ='/adm/preferences'; |
$brtxt = 'Set User Preferences'; |
$brtxt = 'Set User Preferences'; |
$brhelp = 'Prefs_About_Me,Prefs_Language,Prefs_Screen_Name_Nickname,Change_Colors,Change_Password,Prefs_Messages,Change_Discussion_Display'; |
$brhelp = 'Prefs_About_Me,Prefs_Language,Prefs_Screen_Name_Nickname,Change_Colors,Change_Password,Prefs_Messages,Change_Discussion_Display'; |
} |
} |
Apache::lonhtmlcommon::add_breadcrumb |
Apache::lonhtmlcommon::add_breadcrumb |
({href => $brlink, |
({href => $brlink, |
Line 2373 sub handler {
|
Line 2452 sub handler {
|
}elsif($env{'form.action'} eq 'changepass'){ |
}elsif($env{'form.action'} eq 'changepass'){ |
&passwordchanger($r); |
&passwordchanger($r); |
}elsif($env{'form.action'} eq 'verify_and_change_pass'){ |
}elsif($env{'form.action'} eq 'verify_and_change_pass'){ |
&verify_and_change_password($r,'preferences','',\$ended); |
&verify_and_change_password($r,'preferences','','','',\$ended); |
}elsif($env{'form.action'} eq 'changescreenname'){ |
}elsif($env{'form.action'} eq 'changescreenname'){ |
&screennamechanger($r); |
&screennamechanger($r); |
}elsif($env{'form.action'} eq 'verify_and_change_screenname'){ |
}elsif($env{'form.action'} eq 'verify_and_change_screenname'){ |
Line 2449 sub handler {
|
Line 2528 sub handler {
|
&print_main_menu($r); |
&print_main_menu($r); |
$ended = 1; |
$ended = 1; |
} elsif ($env{'form.action'} eq 'changelockednames') { |
} elsif ($env{'form.action'} eq 'changelockednames') { |
&lockednameschanger($r); |
$ended = &lockednameschanger($r); |
} elsif ($env{'form.action'} eq 'verify_and_change_lockednames') { |
} elsif ($env{'form.action'} eq 'verify_and_change_lockednames') { |
&verify_and_change_lockednames($r); |
&verify_and_change_lockednames($r); |
$ended = 1; |
$ended = 1; |