version 1.192, 2017/11/04 20:23:23
|
version 1.200, 2019/05/11 21:34:01
|
Line 438 sub javascript_validations {
|
Line 438 sub javascript_validations {
|
} elsif ($context eq 'domain') { |
} elsif ($context eq 'domain') { |
$setsection_call = 'setCourse()'; |
$setsection_call = 'setCourse()'; |
$setsections_js = &dc_setcourse_js($param{'formname'},$mode, |
$setsections_js = &dc_setcourse_js($param{'formname'},$mode, |
$context,$showcredits); |
$context,$showcredits,$domain); |
} |
} |
$finish = " var checkSec = $setsection_call\n". |
$finish = " var checkSec = $setsection_call\n". |
" if (checkSec == 'ok') {\n". |
" if (checkSec == 'ok') {\n". |
Line 531 END
|
Line 531 END
|
/* regexp here to check for non \d \. in credits */ |
/* regexp here to check for non \d \. in credits */ |
END |
END |
} else { |
} else { |
|
my ($numrules,$intargjs) = |
|
&passwd_validation_js('vf.elements[current.argfield].value',$domain); |
$auth_checks .= (<<END); |
$auth_checks .= (<<END); |
foundatype=1; |
foundatype=1; |
if (current.argfield == null || current.argfield == '') { |
if (current.argfield == null || current.argfield == '') { |
|
// The login radiobutton checked does not have an associated textbox |
|
} else if (vf.elements[current.argfield].value == '') { |
var alertmsg = ''; |
var alertmsg = ''; |
switch (current.radiovalue) { |
switch (current.radiovalue) { |
case 'krb': |
case 'krb': |
alertmsg = '$alert{'krb'}'; |
alertmsg = '$alert{'krb'}'; |
break; |
break; |
case 'loc': |
case 'loc': |
case 'fsys': |
case 'int': |
alertmsg = '$alert{'ipass'}'; |
alertmsg = '$alert{'ipass'}'; |
break; |
break; |
case 'fsys': |
case 'fsys': |
alertmsg = ''; |
alertmsg = '$alert{'ipass'}'; |
break; |
break; |
|
case 'lti': |
default: |
default: |
alertmsg = ''; |
alertmsg = ''; |
} |
} |
Line 553 END
|
Line 558 END
|
alert(alertmsg); |
alert(alertmsg); |
return; |
return; |
} |
} |
|
} else if (current.radiovalue == 'int') { |
|
if ($numrules > 0) { |
|
$intargjs |
|
} |
} |
} |
END |
END |
} |
} |
Line 641 END
|
Line 650 END
|
$section_checks.$authheader; |
$section_checks.$authheader; |
return $result; |
return $result; |
} |
} |
|
|
|
sub passwd_validation_js { |
|
my ($currpasswdval,$domain) = @_; |
|
my %passwdconf = &Apache::lonnet::get_passwdconf($domain); |
|
my ($min,$max,@chars,$numrules,$intargjs,%alert); |
|
$numrules = 0; |
|
if (ref($passwdconf{'chars'}) eq 'ARRAY') { |
|
if ($passwdconf{'min'} =~ /^\d+$/) { |
|
$min = $passwdconf{'min'}; |
|
$numrules ++; |
|
} |
|
if ($passwdconf{'max'} =~ /^\d+$/) { |
|
$max = $passwdconf{'max'}; |
|
$numrules ++; |
|
} |
|
@chars = @{$passwdconf{'chars'}}; |
|
if (@chars) { |
|
$numrules ++; |
|
} |
|
} else { |
|
$min = 7; |
|
$numrules ++; |
|
} |
|
if (($min ne '') || ($max ne '') || (@chars > 0)) { |
|
my $alertmsg = &mt('Initial password did not satisfy requirement(s):').'\n\n'; |
|
if ($min) { |
|
$alert{'min'} = &mt('minimum [quant,_1,character]',$min).'\n'; |
|
} |
|
if ($max) { |
|
$alert{'max'} = &mt('maximum [quant,_1,character]',$max).'\n'; |
|
} |
|
my (@charalerts,@charrules); |
|
if (@chars) { |
|
if (grep(/^uc$/,@chars)) { |
|
push(@charalerts,&mt('contain at least one upper case letter')); |
|
push(@charrules,'uc'); |
|
} |
|
if (grep(/^lc$/,@chars)) { |
|
push(@charalerts,&mt('contain at least one lower case letter')); |
|
push(@charrules,'lc'); |
|
} |
|
if (grep(/^num$/,@chars)) { |
|
push(@charalerts,&mt('contain at least one number')); |
|
push(@charrules,'num'); |
|
} |
|
if (grep(/^spec$/,@chars)) { |
|
push(@charalerts,&mt('contain at least one non-alphanumeric')); |
|
push(@charrules,'spec'); |
|
} |
|
} |
|
$intargjs = qq| var rulesmsg = '';\n|. |
|
qq| var currpwval = $currpasswdval;\n|; |
|
if ($min) { |
|
$intargjs .= qq| |
|
if (currpwval.length < $min) { |
|
rulesmsg += ' - $alert{min}'; |
|
} |
|
|; |
|
} |
|
if ($max) { |
|
$intargjs .= qq| |
|
if (currpwval.length > $max) { |
|
rulesmsg += ' - $alert{max}'; |
|
} |
|
|; |
|
} |
|
if (@chars > 0) { |
|
my $charrulestr = '"'.join('","',@charrules).'"'; |
|
my $charalertstr = '"'.join('","',@charalerts).'"'; |
|
$intargjs .= qq| var brokerules = new Array();\n|. |
|
qq| var charrules = new Array($charrulestr);\n|. |
|
qq| var charalerts = new Array($charalertstr);\n|; |
|
my %rules; |
|
map { $rules{$_} = 1; } @chars; |
|
if ($rules{'uc'}) { |
|
$intargjs .= qq| |
|
var ucRegExp = /[A-Z]/; |
|
if (!ucRegExp.test(currpwval)) { |
|
brokerules.push('uc'); |
|
} |
|
|; |
|
} |
|
if ($rules{'lc'}) { |
|
$intargjs .= qq| |
|
var lcRegExp = /[a-z]/; |
|
if (!lcRegExp.test(currpwval)) { |
|
brokerules.push('lc'); |
|
} |
|
|; |
|
} |
|
if ($rules{'num'}) { |
|
$intargjs .= qq| |
|
var numRegExp = /[0-9]/; |
|
if (!numRegExp.test(currpwval)) { |
|
brokerules.push('num'); |
|
} |
|
|; |
|
} |
|
if ($rules{'spec'}) { |
|
$intargjs .= q| |
|
var specRegExp = /[!"#$%&'()*+,\-.\/:;<=>?@[\\^\]_`{\|}~]/; |
|
if (!specRegExp.test(currpwval)) { |
|
brokerules.push('spec'); |
|
} |
|
|; |
|
} |
|
$intargjs .= qq| |
|
if (brokerules.length > 0) { |
|
for (var i=0; i<brokerules.length; i++) { |
|
for (var j=0; j<charrules.length; j++) { |
|
if (brokerules[i] == charrules[j]) { |
|
rulesmsg += ' - '+charalerts[j]+'\\n'; |
|
break; |
|
} |
|
} |
|
} |
|
} |
|
|; |
|
} |
|
$intargjs .= qq| |
|
if (rulesmsg != '') { |
|
rulesmsg = '$alertmsg'+rulesmsg; |
|
alert(rulesmsg); |
|
return false; |
|
} |
|
|; |
|
} |
|
return ($numrules,$intargjs); |
|
} |
|
|
############################################################### |
############################################################### |
############################################################### |
############################################################### |
sub upload_manager_javascript_forward_associate { |
sub upload_manager_javascript_forward_associate { |
Line 898 sub print_upload_manager_footer {
|
Line 1037 sub print_upload_manager_footer {
|
my $krbform = &Apache::loncommon::authform_kerberos(%param); |
my $krbform = &Apache::loncommon::authform_kerberos(%param); |
my $intform = &Apache::loncommon::authform_internal(%param); |
my $intform = &Apache::loncommon::authform_internal(%param); |
my $locform = &Apache::loncommon::authform_local(%param); |
my $locform = &Apache::loncommon::authform_local(%param); |
|
my $ltiform = &Apache::loncommon::authform_lti(%param); |
my $date_table = &date_setting_table(undef,undef,$context,undef, |
my $date_table = &date_setting_table(undef,undef,$context,undef, |
$formname,$permission,$crstype); |
$formname,$permission,$crstype); |
|
|
Line 926 sub print_upload_manager_footer {
|
Line 1066 sub print_upload_manager_footer {
|
&Apache::loncommon::help_open_topic('Auth_Options'). |
&Apache::loncommon::help_open_topic('Auth_Options'). |
"</p>\n"; |
"</p>\n"; |
} |
} |
$Str .= &set_login($defdom,$krbform,$intform,$locform); |
$Str .= &set_login($defdom,$krbform,$intform,$locform,$ltiform); |
|
|
my ($home_server_pick,$numlib) = |
my ($home_server_pick,$numlib) = |
&Apache::loncommon::home_server_form_item($defdom,'lcserver', |
&Apache::loncommon::home_server_form_item($defdom,'lcserver', |
Line 1132 sub print_upload_manager_form {
|
Line 1272 sub print_upload_manager_form {
|
&Apache::loncommon::load_tmp_file($r,$datatoken); |
&Apache::loncommon::load_tmp_file($r,$datatoken); |
} |
} |
} |
} |
|
if ($datatoken eq '') { |
|
$r->print('<p class="LC_error">'.&mt('Error').': '. |
|
&mt('Invalid datatoken').'</p>'); |
|
return 'missingdata'; |
|
} |
my @records=&Apache::loncommon::upfile_record_sep(); |
my @records=&Apache::loncommon::upfile_record_sep(); |
if($env{'form.noFirstLine'}){ |
if($env{'form.noFirstLine'}){ |
$firstLine=shift(@records); |
$firstLine=shift(@records); |
Line 1214 sub print_upload_manager_form {
|
Line 1359 sub print_upload_manager_form {
|
} |
} |
&print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear, |
&print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear, |
$context,$permission,$crstype,$showcredits); |
$context,$permission,$crstype,$showcredits); |
|
return 'ok'; |
} |
} |
|
|
sub setup_date_selectors { |
sub setup_date_selectors { |
Line 4105 sub print_first_users_upload_form {
|
Line 4251 sub print_first_users_upload_form {
|
.&Apache::lonhtmlcommon::end_pick_box(); |
.&Apache::lonhtmlcommon::end_pick_box(); |
|
|
$str .= '<p>' |
$str .= '<p>' |
.'<input type="submit" name="fileupload" value="'.&mt('Next').'"' |
.'<input type="button" name="fileupload" value="'.&mt('Next').'"' |
.' onclick="javascript:checkUpload(this.form);" />' |
.' onclick="javascript:checkUpload(this.form);" />' |
.'</p>'; |
.'</p>'; |
|
|
Line 4179 sub upfile_drop_add {
|
Line 4325 sub upfile_drop_add {
|
$r->print('<span class="LC_error">'.&mt('Error').': '. |
$r->print('<span class="LC_error">'.&mt('Error').': '. |
&mt('Enrollment of users not permitted for specified default domain: [_1].', |
&mt('Enrollment of users not permitted for specified default domain: [_1].', |
&Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'</span>'); |
&Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'</span>'); |
return; |
return 'untrusted'; |
} |
} |
} |
} |
} elsif ($context eq 'author') { |
} elsif ($context eq 'author') { |
Line 4193 sub upfile_drop_add {
|
Line 4339 sub upfile_drop_add {
|
$r->print('<span class="LC_error">'.&mt('Error').': '. |
$r->print('<span class="LC_error">'.&mt('Error').': '. |
&mt('Addition of users not permitted for specified default domain: [_1].', |
&mt('Addition of users not permitted for specified default domain: [_1].', |
&Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'</span>'); |
&Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'</span>'); |
return; |
return 'untrusted'; |
} |
} |
} |
} |
} elsif (($context eq 'domain') && ($setting eq 'domain')) { |
} elsif (($context eq 'domain') && ($setting eq 'domain')) { |
Line 4206 sub upfile_drop_add {
|
Line 4352 sub upfile_drop_add {
|
$r->print('<span class="LC_error">'.&mt('Error').': '. |
$r->print('<span class="LC_error">'.&mt('Error').': '. |
&mt('Addition of users not permitted for specified default domain: [_1].', |
&mt('Addition of users not permitted for specified default domain: [_1].', |
&Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'</span>'); |
&Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'</span>'); |
return; |
return 'untrusted'; |
} |
} |
} |
} |
} |
} |
Line 4219 sub upfile_drop_add {
|
Line 4365 sub upfile_drop_add {
|
} else { |
} else { |
my %home_servers = &Apache::lonnet::get_servers($defdom,'library'); |
my %home_servers = &Apache::lonnet::get_servers($defdom,'library'); |
if (! exists($home_servers{$desiredhost})) { |
if (! exists($home_servers{$desiredhost})) { |
$r->print('<span class="LC_error">'.&mt('Error').': '. |
$r->print('<p class="LC_error">'.&mt('Error').': '. |
&mt('Invalid home server specified').'</span>'); |
&mt('Invalid home server specified').'</p>'); |
return; |
return 'invalidhome'; |
} |
} |
} |
} |
# Determine authentication mechanism |
# Determine authentication mechanism |
Line 4231 sub upfile_drop_add {
|
Line 4377 sub upfile_drop_add {
|
} |
} |
my $amode = ''; |
my $amode = ''; |
my $genpwd = ''; |
my $genpwd = ''; |
|
my @genpwdfail; |
if ($env{'form.login'} eq 'krb') { |
if ($env{'form.login'} eq 'krb') { |
$amode='krb'; |
$amode='krb'; |
$amode.=$env{'form.krbver'}; |
$amode.=$env{'form.krbver'}; |
Line 4239 sub upfile_drop_add {
|
Line 4386 sub upfile_drop_add {
|
$amode='internal'; |
$amode='internal'; |
if ((defined($env{'form.intarg'})) && ($env{'form.intarg'})) { |
if ((defined($env{'form.intarg'})) && ($env{'form.intarg'})) { |
$genpwd=$env{'form.intarg'}; |
$genpwd=$env{'form.intarg'}; |
|
@genpwdfail = |
|
&Apache::loncommon::check_passwd_rules($domain,$genpwd); |
} |
} |
} elsif ($env{'form.login'} eq 'loc') { |
} elsif ($env{'form.login'} eq 'loc') { |
$amode='localauth'; |
$amode='localauth'; |
if ((defined($env{'form.locarg'})) && ($env{'form.locarg'})) { |
if ((defined($env{'form.locarg'})) && ($env{'form.locarg'})) { |
$genpwd=$env{'form.locarg'}; |
$genpwd=$env{'form.locarg'}; |
} |
} |
|
} elsif ($env{'form.login'} eq 'lti') { |
|
$amode='lti'; |
} |
} |
if ($amode =~ /^krb/) { |
if ($amode =~ /^krb/) { |
if (! defined($genpwd) || $genpwd eq '') { |
if (! defined($genpwd) || $genpwd eq '') { |
$r->print('<span class="Error">'.': '. |
$r->print('<span class="Error">'. |
&mt('Unable to enroll users').' '. |
&mt('Unable to enroll users').' '. |
&mt('No Kerberos domain was specified.').'</span></p>'); |
&mt('No Kerberos domain was specified.').'</span></p>'); |
$amode = ''; # This causes the loop below to be skipped |
$amode = ''; # This causes the loop below to be skipped |
Line 4317 sub upfile_drop_add {
|
Line 4468 sub upfile_drop_add {
|
\@statuses,\@poss_roles); |
\@statuses,\@poss_roles); |
&gather_userinfo($context,'view',\%userlist,$indexhash,\%info, |
&gather_userinfo($context,'view',\%userlist,$indexhash,\%info, |
\%cstr_roles,$permission); |
\%cstr_roles,$permission); |
|
|
} |
} |
} |
} |
} |
} |
|
if ($datatoken eq '') { |
|
$r->print('<p class="LC_error">'.&mt('Error').': '. |
|
&mt('Invalid datatoken').'</p>'); |
|
return 'missingdata'; |
|
} |
if ( $domain eq &LONCAPA::clean_domain($domain) |
if ( $domain eq &LONCAPA::clean_domain($domain) |
&& ($amode ne '')) { |
&& ($amode ne '')) { |
####################################### |
####################################### |
Line 4390 sub upfile_drop_add {
|
Line 4545 sub upfile_drop_add {
|
my $newuserdom = $env{'request.role.domain'}; |
my $newuserdom = $env{'request.role.domain'}; |
map { $cancreate{$_} = &can_create_user($newuserdom,$context,$_); } keys(%longtypes); |
map { $cancreate{$_} = &can_create_user($newuserdom,$context,$_); } keys(%longtypes); |
# Get new users list |
# Get new users list |
my (%existinguser,%userinfo,%disallow,%rulematch,%inst_results,%alerts,%checkuname); |
my (%existinguser,%userinfo,%disallow,%rulematch,%inst_results,%alerts,%checkuname, |
|
%showpasswdrules,$haspasswdmap); |
my $counter = -1; |
my $counter = -1; |
my (%willtrust,%trustchecked); |
my (%willtrust,%trustchecked); |
foreach my $line (@userdata) { |
foreach my $line (@userdata) { |
Line 4541 sub upfile_drop_add {
|
Line 4697 sub upfile_drop_add {
|
} |
} |
} |
} |
# determine user password |
# determine user password |
my $password = $genpwd; |
my $password; |
|
my $passwdfromfile; |
if (defined($fields{'ipwd'})) { |
if (defined($fields{'ipwd'})) { |
if ($entries{$fields{'ipwd'}}) { |
if ($entries{$fields{'ipwd'}}) { |
$password=$entries{$fields{'ipwd'}}; |
$password=$entries{$fields{'ipwd'}}; |
|
$passwdfromfile = 1; |
|
if ($env{'form.login'} eq 'int') { |
|
my $uhome=&Apache::lonnet::homeserver($username,$userdomain); |
|
if (($uhome eq 'no_host') || ($changeauth)) { |
|
my @brokepwdrules = |
|
&Apache::loncommon::check_passwd_rules($domain,$password); |
|
if (@brokepwdrules) { |
|
$disallow{$counter} = &mt('[_1]: Password included in file for this user did not meet requirements.', |
|
'<b>'.$username.'</b>'); |
|
map { $showpasswdrules{$_} = 1; } @brokepwdrules; |
|
next; |
|
} |
|
} |
|
} |
} |
} |
} |
} |
|
unless ($passwdfromfile) { |
|
if ($env{'form.login'} eq 'int') { |
|
if (@genpwdfail) { |
|
my $uhome=&Apache::lonnet::homeserver($username,$userdomain); |
|
if (($uhome eq 'no_host') || ($changeauth)) { |
|
$disallow{$counter} = &mt('[_1]: No specific password in file for this user; default password did not meet requirements', |
|
'<b>'.$username.'</b>'); |
|
unless ($haspasswdmap) { |
|
map { $showpasswdrules{$_} = 1; } @genpwdfail; |
|
$haspasswdmap = 1; |
|
} |
|
} |
|
next; |
|
} |
|
} |
|
$password = $genpwd; |
|
} |
# determine user role |
# determine user role |
my $role = ''; |
my $role = ''; |
if (defined($fields{'role'})) { |
if (defined($fields{'role'})) { |
Line 4614 sub upfile_drop_add {
|
Line 4802 sub upfile_drop_add {
|
&mt('The user does not already exist, and you may not create a new user in a different domain.'); |
&mt('The user does not already exist, and you may not create a new user in a different domain.'); |
next; |
next; |
} else { |
} else { |
unless ($password || $env{'form.login'} eq 'loc') { |
unless (($password ne '') || ($env{'form.login'} eq 'loc') || ($env{'form.login'} eq 'lti')) { |
$disallow{$counter} = |
$disallow{$counter} = |
&mt('[_1]: This is a new user but no default password was provided, and the authentication type requires one.', |
&mt('[_1]: This is a new user but no default password was provided, and the authentication type requires one.', |
'<b>'.$username.'</b>'); |
'<b>'.$username.'</b>'); |
Line 4908 sub upfile_drop_add {
|
Line 5096 sub upfile_drop_add {
|
$counts{'auth'})."</p>\n"); |
$counts{'auth'})."</p>\n"); |
} |
} |
$r->print(&print_namespacing_alerts($domain,\%alerts,\%curr_rules)); |
$r->print(&print_namespacing_alerts($domain,\%alerts,\%curr_rules)); |
|
$r->print(&passwdrule_alerts($domain,\%showpasswdrules)); |
##################################### |
##################################### |
# Display list of students to drop # |
# Display list of students to drop # |
##################################### |
##################################### |
Line 4934 sub upfile_drop_add {
|
Line 5123 sub upfile_drop_add {
|
} |
} |
} |
} |
} # end of unless |
} # end of unless |
|
return 'ok'; |
} |
} |
|
|
sub print_namespacing_alerts { |
sub print_namespacing_alerts { |
Line 4976 sub print_namespacing_alerts {
|
Line 5166 sub print_namespacing_alerts {
|
} |
} |
} |
} |
|
|
|
sub passwdrule_alerts { |
|
my ($domain,$passwdrules) = @_; |
|
my $warning; |
|
if (ref($passwdrules) eq 'HASH') { |
|
my %showrules = %{$passwdrules}; |
|
if (keys(%showrules)) { |
|
my %passwdconf = &Apache::lonnet::get_passwdconf($domain); |
|
$warning = '<b>'.&mt('Password requirement(s) unmet for one or more users:').'</b><ul>'; |
|
if ($showrules{'min'}) { |
|
$warning .= '<li>'.&mt('minimum [quant,_1,character]',$passwdconf{'min'}).'</li>'; |
|
} |
|
if ($showrules{'max'}) { |
|
$warning .= '<li>'.&mt('maximum [quant,_1,character]',$passwdconf{'max'}).'</li>'; |
|
} |
|
if ($showrules{'uc'}) { |
|
$warning .= '<li>'.&mt('contain at least one upper case letter').'</li>'; |
|
} |
|
if ($showrules{'lc'}) { |
|
$warning .= '<li>'.&mt('contain at least one lower case letter').'</li>'; |
|
} |
|
if ($showrules{'num'}) { |
|
$warning .= '<li>'.&mt('contain at least one number').'</li>'; |
|
} |
|
if ($showrules{'spec'}) { |
|
$warning .= '<li>'.&mt('contain at least one non-alphanumeric').'</li>'; |
|
} |
|
$warning .= '</ul>'; |
|
} |
|
} |
|
return $warning; |
|
} |
|
|
sub user_change_result { |
sub user_change_result { |
my ($r,$userresult,$authresult,$roleresult,$idresult,$counts,$flushc, |
my ($r,$userresult,$authresult,$roleresult,$idresult,$counts,$flushc, |
$username,$userdomain,$userchg) = @_; |
$username,$userdomain,$userchg) = @_; |
Line 5479 END
|
Line 5701 END
|
} |
} |
|
|
sub set_login { |
sub set_login { |
my ($dom,$authformkrb,$authformint,$authformloc) = @_; |
my ($dom,$authformkrb,$authformint,$authformloc,$authformlti) = @_; |
my %domconfig = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom); |
my %domconfig = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom); |
my $response; |
my $response; |
my ($authnum,%can_assign) = |
my ($authnum,%can_assign) = |
Line 5501 sub set_login {
|
Line 5723 sub set_login {
|
'<td>'.$authformloc.'</td>'. |
'<td>'.$authformloc.'</td>'. |
&Apache::loncommon::end_data_table_row()."\n"; |
&Apache::loncommon::end_data_table_row()."\n"; |
} |
} |
|
if ($can_assign{'lti'}) { |
|
$response .= &Apache::loncommon::start_data_table_row(). |
|
'<td>'.$authformlti.'</td>'. |
|
&Apache::loncommon::end_data_table_row()."\n"; |
|
} |
$response .= &Apache::loncommon::end_data_table(); |
$response .= &Apache::loncommon::end_data_table(); |
} |
} |
return $response; |
return $response; |
Line 5845 sub can_modify_userinfo {
|
Line 6072 sub can_modify_userinfo {
|
return %canmodify; |
return %canmodify; |
} |
} |
|
|
|
sub can_change_internalpass { |
|
my ($uname,$udom,$crstype,$permission) = @_; |
|
my $canchange; |
|
if (&Apache::lonnet::allowed('mau',$udom)) { |
|
$canchange = 1; |
|
} elsif ((ref($permission) eq 'HASH') && ($permission->{'mip'}) && |
|
($udom eq $env{'request.role.domain'})) { |
|
unless ($env{'course.'.$env{'request.course.id'}.'.internal.nopasswdchg'}) { |
|
my ($cnum,$cdom) = &get_course_identity(); |
|
if ((&Apache::lonnet::is_course_owner($cdom,$cnum)) && ($udom eq $env{'user.domain'})) { |
|
my @userstatuses = ('default'); |
|
my %userenv = &Apache::lonnet::userenvironment($udom,$uname,'inststatus'); |
|
if ($userenv{'inststatus'} ne '') { |
|
@userstatuses = split(/:/,$userenv{'inststatus'}); |
|
} |
|
my $noupdate = 1; |
|
my %passwdconf = &Apache::lonnet::get_passwdconf($cdom); |
|
if (ref($passwdconf{'crsownerchg'}) eq 'HASH') { |
|
if (ref($passwdconf{'crsownerchg'}{'for'}) eq 'ARRAY') { |
|
foreach my $status (@userstatuses) { |
|
if (grep(/^\Q$status\E$/,@{$passwdconf{'crsownerchg'}{'for'}})) { |
|
undef($noupdate); |
|
last; |
|
} |
|
} |
|
} |
|
} |
|
if ($noupdate) { |
|
return; |
|
} |
|
my %owned = &Apache::lonnet::courseiddump($cdom,'.',1,'.', |
|
$env{'user.name'}.':'.$env{'user.domain'}, |
|
undef,undef,undef,'.'); |
|
my %roleshash = &Apache::lonnet::get_my_roles($uname,$udom,'userroles', |
|
['active','future']); |
|
foreach my $key (keys(%roleshash)) { |
|
my ($name,$domain,$role) = split(/:/,$key); |
|
if ($role eq 'st') { |
|
next if (($name eq $cnum) && ($domain eq $cdom)); |
|
if ($owned{$domain.'_'.$name}) { |
|
if (ref($owned{$domain.'_'.$name}) eq 'HASH') { |
|
if ($owned{$domain.'_'.$name}{'nopasswdchg'}) { |
|
$noupdate = 1; |
|
last; |
|
} |
|
} |
|
} else { |
|
$noupdate = 1; |
|
last; |
|
} |
|
} else { |
|
$noupdate = 1; |
|
last; |
|
} |
|
} |
|
unless ($noupdate) { |
|
$canchange = 1; |
|
} |
|
} |
|
} |
|
} |
|
return $canchange; |
|
} |
|
|
sub check_usertype { |
sub check_usertype { |
my ($dom,$uname,$rules,$curr_rules,$got_rules) = @_; |
my ($dom,$uname,$rules,$curr_rules,$got_rules) = @_; |
my $usertype; |
my $usertype; |
Line 5967 sub get_permission {
|
Line 6258 sub get_permission {
|
} |
} |
} |
} |
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
my $user = $env{'user.name'}.':'.$env{'user.domain'}; |
my $user; |
|
if (($env{'user.name'} ne '') && ($env{'user.domain'} ne '')) { |
|
$user = $env{'user.name'}.':'.$env{'user.domain'}; |
|
} |
if (($user ne '') && ($env{'course.'.$env{'request.course.id'}.'.internal.courseowner'} eq |
if (($user ne '') && ($env{'course.'.$env{'request.course.id'}.'.internal.courseowner'} eq |
$user)) { |
$user)) { |
$permission{'owner'} = 1; |
$permission{'owner'} = 1; |
|
if (&Apache::lonnet::allowed('mip',$env{'request.course.id'})) { |
|
$permission{'mip'} = 1; |
|
} |
} elsif (($user ne '') && ($env{'course.'.$env{'request.course.id'}.'.internal.co-owners'} ne '')) { |
} elsif (($user ne '') && ($env{'course.'.$env{'request.course.id'}.'.internal.co-owners'} ne '')) { |
if (grep(/^\Q$user\E$/,split(/,/,$env{'course.'.$env{'request.course.id'}.'.internal.co-owners'}))) { |
if (grep(/^\Q$user\E$/,split(/,/,$env{'course.'.$env{'request.course.id'}.'.internal.co-owners'}))) { |
$permission{'co-owner'} = 1; |
$permission{'co-owner'} = 1; |
Line 6057 sub get_course_identity {
|
Line 6354 sub get_course_identity {
|
} |
} |
|
|
sub dc_setcourse_js { |
sub dc_setcourse_js { |
my ($formname,$mode,$context,$showcredits) = @_; |
my ($formname,$mode,$context,$showcredits,$domain) = @_; |
my ($dc_setcourse_code,$authen_check); |
my ($dc_setcourse_code,$authen_check); |
my $cctext = &Apache::lonnet::plaintext('cc'); |
my $cctext = &Apache::lonnet::plaintext('cc'); |
my $cotext = &Apache::lonnet::plaintext('co'); |
my $cotext = &Apache::lonnet::plaintext('co'); |
Line 6066 sub dc_setcourse_js {
|
Line 6363 sub dc_setcourse_js {
|
if ($mode eq 'upload') { |
if ($mode eq 'upload') { |
$role = 'courserole'; |
$role = 'courserole'; |
} else { |
} else { |
$authen_check = &verify_authen($formname,$context); |
$authen_check = &verify_authen($formname,$context,$domain); |
} |
} |
$dc_setcourse_code = (<<"SCRIPTTOP"); |
$dc_setcourse_code = (<<"SCRIPTTOP"); |
$authen_check |
$authen_check |
Line 6210 ENDSCRIPT
|
Line 6507 ENDSCRIPT
|
} |
} |
|
|
sub verify_authen { |
sub verify_authen { |
my ($formname,$context) = @_; |
my ($formname,$context,$domain) = @_; |
my %alerts = &authcheck_alerts(); |
my %alerts = &authcheck_alerts(); |
my $finish = "return 'ok';"; |
my $finish = "return 'ok';"; |
if ($context eq 'author') { |
if ($context eq 'author') { |
$finish = "document.$formname.submit();"; |
$finish = "document.$formname.submit();"; |
} |
} |
|
my ($numrules,$intargjs) = |
|
&passwd_validation_js('argpicked',$domain); |
my $outcome = <<"ENDSCRIPT"; |
my $outcome = <<"ENDSCRIPT"; |
|
|
function auth_check() { |
function auth_check() { |
Line 6249 function auth_check() {
|
Line 6548 function auth_check() {
|
break; |
break; |
case 'int': |
case 'int': |
alertmsg = '$alerts{'ipass'}'; |
alertmsg = '$alerts{'ipass'}'; |
|
break; |
case 'fsys': |
case 'fsys': |
alertmsg = '$alerts{'ipass'}'; |
alertmsg = '$alerts{'ipass'}'; |
break; |
break; |
Line 6262 function auth_check() {
|
Line 6562 function auth_check() {
|
alert(alertmsg); |
alert(alertmsg); |
return; |
return; |
} |
} |
|
} else if (logintype == 'int') { |
|
var numrules = $numrules; |
|
if (numrules > 0) { |
|
$intargjs |
|
} |
} |
} |
$finish |
$finish |
} |
} |