version 1.184.4.10.2.8, 2024/08/24 23:49:48
|
version 1.191, 2017/11/04 16:13:31
|
Line 103 sub modifystudent {
|
Line 103 sub modifystudent {
|
sub modifyuserrole { |
sub modifyuserrole { |
my ($context,$setting,$changeauth,$cid,$udom,$uname,$uid,$umode,$upass, |
my ($context,$setting,$changeauth,$cid,$udom,$uname,$uid,$umode,$upass, |
$first,$middle,$last,$gene,$sec,$forceid,$desiredhome,$email,$role, |
$first,$middle,$last,$gene,$sec,$forceid,$desiredhome,$email,$role, |
$end,$start,$checkid,$inststatus,$emptyok) = @_; |
$end,$start,$checkid,$inststatus) = @_; |
my ($scope,$userresult,$authresult,$roleresult,$idresult); |
my ($scope,$userresult,$authresult,$roleresult,$idresult); |
if ($setting eq 'course' || $context eq 'course') { |
if ($setting eq 'course' || $context eq 'course') { |
$scope = '/'.$cid; |
$scope = '/'.$cid; |
Line 114 sub modifyuserrole {
|
Line 114 sub modifyuserrole {
|
} elsif ($context eq 'domain') { |
} elsif ($context eq 'domain') { |
$scope = '/'.$env{'request.role.domain'}.'/'; |
$scope = '/'.$env{'request.role.domain'}.'/'; |
} elsif ($context eq 'author') { |
} elsif ($context eq 'author') { |
if ($env{'request.role'} =~ m{^ca\.(/$match_domain/$match_username)$}) { |
$scope = '/'.$env{'user.domain'}.'/'.$env{'user.name'}; |
$scope = $1; |
|
} else { |
|
$scope = '/'.$env{'user.domain'}.'/'.$env{'user.name'}; |
|
} |
|
} |
} |
if ($context eq 'domain') { |
if ($context eq 'domain') { |
my $uhome = &Apache::lonnet::homeserver($uname,$udom); |
my $uhome = &Apache::lonnet::homeserver($uname,$udom); |
Line 138 sub modifyuserrole {
|
Line 134 sub modifyuserrole {
|
generation => $gene, |
generation => $gene, |
id => $uid, |
id => $uid, |
); |
); |
|
|
# When "Update ID in user's course(s)" and "Force change of existing ID" |
|
# checkboxes both checked, prevent replacement of name information |
|
# in classlist.db file(s) for the user's course(s) with blank(s), |
|
# in the case where the uploaded csv file was without column(s) for |
|
# the particular field. Fields are: First Name, Middle Names/Initials, |
|
# Last Name (or the composite: Last Name, First Names), and Generation. |
|
|
|
my %emptyallowed; |
|
if ((ref($emptyok) eq 'HASH') && (keys(%{$emptyok}) > 0)) { |
|
%emptyallowed = %{$emptyok}; |
|
} |
|
foreach my $field (keys(%userupdate)) { |
|
if ($userupdate{$field} eq '') { |
|
unless ($emptyallowed{$field}) { |
|
delete($userupdate{$field}); |
|
} |
|
} |
|
} |
|
$idresult = &propagate_id_change($uname,$udom,\%userupdate); |
$idresult = &propagate_id_change($uname,$udom,\%userupdate); |
} |
} |
} |
} |
Line 461 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,$domain); |
$context,$showcredits); |
} |
} |
$finish = " var checkSec = $setsection_call\n". |
$finish = " var checkSec = $setsection_call\n". |
" if (checkSec == 'ok') {\n". |
" if (checkSec == 'ok') {\n". |
Line 533 END
|
Line 510 END
|
"; |
"; |
} elsif ($mode eq 'modifycourse') { |
} elsif ($mode eq 'modifycourse') { |
$auth_checks .= " |
$auth_checks .= " |
if ((current.argfield !== null) && (current.argfield !== undefined) && (current.argfield !== '') && (vf.elements[current.argfield].value == null || vf.elements[current.argfield].value == '')) { |
if (vf.elements[current.argfield].value == null || vf.elements[current.argfield].value == '') { |
"; |
"; |
} |
} |
if ( ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
if ( ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
Line 554 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) = |
|
&Apache::loncommon::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 'int': |
case 'loc': |
alertmsg = '$alert{'ipass'}'; |
|
break; |
|
case 'fsys': |
case 'fsys': |
alertmsg = '$alert{'ipass'}'; |
alertmsg = '$alert{'ipass'}'; |
break; |
break; |
case 'loc': |
case 'fsys': |
alertmsg = ''; |
alertmsg = ''; |
break; |
break; |
default: |
default: |
Line 582 END
|
Line 553 END
|
alert(alertmsg); |
alert(alertmsg); |
return; |
return; |
} |
} |
} else if (current.radiovalue == 'int') { |
|
if ($numrules > 0) { |
|
$intargjs |
|
} |
|
} |
} |
END |
END |
} |
} |
Line 674 END
|
Line 641 END
|
$section_checks.$authheader; |
$section_checks.$authheader; |
return $result; |
return $result; |
} |
} |
|
|
############################################################### |
############################################################### |
############################################################### |
############################################################### |
sub upload_manager_javascript_forward_associate { |
sub upload_manager_javascript_forward_associate { |
Line 977 sub print_upload_manager_footer {
|
Line 943 sub print_upload_manager_footer {
|
&Apache::lonhtmlcommon::row_closure(); |
&Apache::lonhtmlcommon::row_closure(); |
} |
} |
|
|
|
my ($trusted,$untrusted); |
|
if ($context eq 'course') { |
|
($trusted,$untrusted) = &Apache::lonnet::trusted_domains('enroll',$defdom); |
|
} elsif ($context eq 'author') { |
|
($trusted,$untrusted) = &Apache::lonnet::trusted_domains('othcoau',$defdom); |
|
} |
$Str .= &Apache::lonhtmlcommon::row_title(&mt('Default domain')) |
$Str .= &Apache::lonhtmlcommon::row_title(&mt('Default domain')) |
.&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1) |
.&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1,undef,$trusted,$untrusted) |
.&Apache::lonhtmlcommon::row_closure(); |
.&Apache::lonhtmlcommon::row_closure(); |
|
|
$Str .= &Apache::lonhtmlcommon::row_title(&mt('Starting and Ending Dates')) |
$Str .= &Apache::lonhtmlcommon::row_title(&mt('Starting and Ending Dates')) |
Line 1160 sub print_upload_manager_form {
|
Line 1132 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 1247 sub print_upload_manager_form {
|
Line 1214 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 1508 sub construction_space_roles {
|
Line 1474 sub construction_space_roles {
|
foreach my $role (@allroles) { |
foreach my $role (@allroles) { |
if (&Apache::lonnet::allowed('c'.$role,$env{'user.domain'}.'/'.$env{'user.name'})) { |
if (&Apache::lonnet::allowed('c'.$role,$env{'user.domain'}.'/'.$env{'user.name'})) { |
push(@roles,$role); |
push(@roles,$role); |
} elsif ($env{'request.role'} =~ m{^ca\./($match_domain)/($match_username)$}) { |
|
my ($audom,$auname) = ($1,$2); |
|
if (($role eq 'ca') || ($role eq 'aa')) { |
|
if ((&Apache::lonnet::allowed('v'.$role,,$audom.'/'.$auname)) && |
|
($env{"environment.internal.manager./$audom/$auname"})) { |
|
push(@roles,$role); |
|
} |
|
} |
|
} |
} |
} |
} |
return @roles; |
return @roles; |
Line 1619 sub print_userlist {
|
Line 1577 sub print_userlist {
|
if (! exists($env{'form.sortby'})) { |
if (! exists($env{'form.sortby'})) { |
$env{'form.sortby'} = 'username'; |
$env{'form.sortby'} = 'username'; |
} |
} |
my ($showstart,$showend); |
|
if (($env{'form.Status'} eq '') && ($env{'form.phase'} eq '') && |
|
($env{'form.showrole'} eq '') && ($context eq 'course') && |
|
($env{'request.course.id'} ne '') && |
|
($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'} ne '')) { |
|
my $now = time; |
|
my $startaccess = $env{'course.'.$env{'request.course.id'}.'.default_enrollment_start_date'}; |
|
my $endaccess = $env{'course.'.$env{'request.course.id'}.'.default_enrollment_end_date'}; |
|
if (($startaccess) && ($startaccess > $now)) { |
|
$env{'form.Status'} = 'Future'; |
|
$showstart = 1; |
|
} |
|
if (($endaccess ne '') && ($endaccess != 0) && ($endaccess < $now)) { |
|
$env{'form.Status'} = 'Expired'; |
|
undef($showstart); |
|
$showend = 1; |
|
} |
|
} |
|
if ($env{'form.Status'} !~ /^(Any|Expired|Active|Future)$/) { |
if ($env{'form.Status'} !~ /^(Any|Expired|Active|Future)$/) { |
$env{'form.Status'} = 'Active'; |
$env{'form.Status'} = 'Active'; |
} |
} |
Line 1704 sub print_userlist {
|
Line 1644 sub print_userlist {
|
$r->print(§ion_group_filter($cnum,$cdom)); |
$r->print(§ion_group_filter($cnum,$cdom)); |
} |
} |
$r->print('</div><div class="LC_left_float">'. |
$r->print('</div><div class="LC_left_float">'. |
&column_checkboxes($context,$mode,$formname,$showcredits,$showstart,$showend). |
&column_checkboxes($context,$mode,$formname,$showcredits). |
'</div>'); |
'</div>'); |
if ($env{'form.phase'} eq '') { |
if ($env{'form.phase'} eq '') { |
$r->print('<br clear="all" />'. |
$r->print('<br clear="all" />'. |
Line 1790 sub print_userlist {
|
Line 1730 sub print_userlist {
|
} else { |
} else { |
my (%cstr_roles,%dom_roles); |
my (%cstr_roles,%dom_roles); |
if ($context eq 'author') { |
if ($context eq 'author') { |
my @possroles = &roles_by_context($context); |
|
my @allowedroles; |
|
# List co-authors and assistant co-authors |
# List co-authors and assistant co-authors |
my ($auname,$audom); |
my @possroles = &roles_by_context($context); |
if ($env{'request.role'} =~ m{^ca\./($match_domain)/($match_username)$}) { |
%cstr_roles = &Apache::lonnet::get_my_roles(undef,undef,undef, |
($audom,$auname) = ($1,$2); |
\@statuses,\@possroles); |
foreach my $role (@possroles) { |
&gather_userinfo($context,$format,\%userlist,$indexhash,\%userinfo, |
if ((&Apache::lonnet::allowed('v'.$role,"$audom/$auname")) || |
\%cstr_roles,$permission); |
(&Apache::lonnet::allowed('c'.$role,"$audom/$auname"))) { |
|
push(@allowedroles,$role); |
|
} |
|
} |
|
} elsif ($env{'request.role'} =~ m{^au\./($match_domain)/}) { |
|
if ($1 eq $env{'user.domain'}) { |
|
$auname = $env{'user.name'}; |
|
$audom = $env{'user.domain'}; |
|
} |
|
@allowedroles = @possroles; |
|
} |
|
if (($auname ne '') && ($audom ne '')) { |
|
%cstr_roles = &Apache::lonnet::get_my_roles($auname,$audom,undef, |
|
\@statuses,\@allowedroles); |
|
&gather_userinfo($context,$format,\%userlist,$indexhash,\%userinfo, |
|
\%cstr_roles,$permission); |
|
} |
|
} elsif ($context eq 'domain') { |
} elsif ($context eq 'domain') { |
if ($env{'form.roletype'} eq 'domain') { |
if ($env{'form.roletype'} eq 'domain') { |
if (grep(/^authorusage$/,@cols)) { |
if (grep(/^authorusage$/,@cols)) { |
Line 2105 sub get_cols_array {
|
Line 2026 sub get_cols_array {
|
push(@cols,'photo'); |
push(@cols,'photo'); |
} |
} |
if ($context eq 'domain') { |
if ($context eq 'domain') { |
push(@cols,('authorusage','authorquota','extent')); |
push (@cols,('authorusage','authorquota','extent')); |
} |
|
if ($context eq 'author') { |
|
push(@cols,'manager'); |
|
} |
} |
} |
} |
return @cols; |
return @cols; |
} |
} |
|
|
sub column_checkboxes { |
sub column_checkboxes { |
my ($context,$mode,$formname,$showcredits,$showstart,$showend) = @_; |
my ($context,$mode,$formname,$showcredits) = @_; |
my @cols = &get_cols_array($context,$mode,$showcredits); |
my @cols = &get_cols_array($context,$mode,$showcredits); |
my @showncols = &Apache::loncommon::get_env_multiple('form.showcol'); |
my @showncols = &Apache::loncommon::get_env_multiple('form.showcol'); |
my (%disabledchk,%unchecked); |
my (%disabledchk,%unchecked); |
Line 2128 sub column_checkboxes {
|
Line 2046 sub column_checkboxes {
|
if ($showcredits) { |
if ($showcredits) { |
$unchecked{'credits'} = 1; |
$unchecked{'credits'} = 1; |
} |
} |
my %curr_groups = &Apache::longroup::coursegroups(); |
} elsif ($context eq 'domain') { |
unless (keys(%curr_groups)) { |
|
$unchecked{'groups'} = 1; |
|
} |
|
} elsif ($context eq 'domain') { |
|
$unchecked{'extent'} = 1; |
$unchecked{'extent'} = 1; |
} |
} |
if ($showstart) { |
$unchecked{'start'} = 1; |
$unchecked{'lastlogin'} = 1; |
$unchecked{'end'} = 1; |
} else { |
|
$unchecked{'start'} = 1; |
|
} |
|
unless ($showend) { |
|
$unchecked{'end'} = 1; |
|
} |
|
} else { |
} else { |
if ($env{'form.Status'} ne 'Any') { |
if ($env{'form.Status'} ne 'Any') { |
$disabledchk{'status'} = 1; |
$disabledchk{'status'} = 1; |
Line 2159 sub column_checkboxes {
|
Line 2067 sub column_checkboxes {
|
} elsif ($env{'form.roletype'} eq 'domain') { |
} elsif ($env{'form.roletype'} eq 'domain') { |
$disabledchk{'extent'} = 1; |
$disabledchk{'extent'} = 1; |
} |
} |
} elsif ($context eq 'author') { |
|
if (($env{'form.Status'} eq 'Expired') || |
|
($env{'form.showrole'} eq 'aa')) { |
|
$disabledchk{'manager'} = 1; |
|
} |
|
} |
} |
} |
} |
my $numposs = scalar(@cols); |
my $numposs = scalar(@cols); |
Line 2255 sub get_column_names {
|
Line 2158 sub get_column_names {
|
'ca' => "check all", |
'ca' => "check all", |
'ua' => "uncheck all", |
'ua' => "uncheck all", |
'clicker' => "clicker-ID", |
'clicker' => "clicker-ID", |
'manager' => "co-author manager", |
|
); |
); |
if ($context eq 'domain' && $env{'form.roletype'} eq 'course') { |
if ($context eq 'domain' && $env{'form.roletype'} eq 'course') { |
$lt{'extent'} = &mt('course(s): description, section(s), status'); |
$lt{'extent'} = &mt('course(s): description, section(s), status'); |
Line 2385 sub build_user_record {
|
Line 2287 sub build_user_record {
|
|
|
sub courses_selector { |
sub courses_selector { |
my ($cdom,$formname) = @_; |
my ($cdom,$formname) = @_; |
|
my %coursecodes = (); |
my %codes = (); |
my %codes = (); |
my @codetitles = (); |
my @codetitles = (); |
my %cat_titles = (); |
my %cat_titles = (); |
Line 2397 sub courses_selector {
|
Line 2300 sub courses_selector {
|
my $jscript = ''; |
my $jscript = ''; |
|
|
my $totcodes = 0; |
my $totcodes = 0; |
my $instcats = &Apache::lonnet::get_dom_instcats($cdom); |
$totcodes = |
if (ref($instcats) eq 'HASH') { |
&Apache::courseclassifier::retrieve_instcodes(\%coursecodes, |
if ((ref($instcats->{'codetitles'}) eq 'ARRAY') && (ref($instcats->{'codes'}) eq 'HASH') && |
$cdom,$totcodes); |
(ref($instcats->{'cat_titles'}) eq 'HASH') && (ref($instcats->{'cat_order'}) eq 'HASH')) { |
if ($totcodes > 0) { |
%codes = %{$instcats->{'codes'}}; |
$format_reply = |
@codetitles = @{$instcats->{'codetitles'}}; |
&Apache::lonnet::auto_instcode_format($caller,$cdom,\%coursecodes, |
%cat_titles = %{$instcats->{'cat_titles'}}; |
\%codes,\@codetitles,\%cat_titles,\%cat_order); |
%cat_order = %{$instcats->{'cat_order'}}; |
if ($format_reply eq 'ok') { |
$totcodes = scalar(keys(%codes)); |
|
my $numtypes = @codetitles; |
my $numtypes = @codetitles; |
&Apache::courseclassifier::build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles); |
&Apache::courseclassifier::build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles); |
my ($scripttext,$longtitles) = &Apache::courseclassifier::javascript_definitions(\@codetitles,\%idlist,\%idlist_titles,\%idnums,\%cat_titles); |
my ($scripttext,$longtitles) = &Apache::courseclassifier::javascript_definitions(\@codetitles,\%idlist,\%idlist_titles,\%idnums,\%cat_titles); |
Line 2540 sub make_keylist_array {
|
Line 2442 sub make_keylist_array {
|
$index->{'instsec'} = &Apache::loncoursedata::CL_INSTSEC(); |
$index->{'instsec'} = &Apache::loncoursedata::CL_INSTSEC(); |
$index->{'authorquota'} = &Apache::loncoursedata::CL_AUTHORQUOTA(); |
$index->{'authorquota'} = &Apache::loncoursedata::CL_AUTHORQUOTA(); |
$index->{'authorusage'} = &Apache::loncoursedata::CL_AUTHORUSAGE(); |
$index->{'authorusage'} = &Apache::loncoursedata::CL_AUTHORUSAGE(); |
$index->{'manager'} = &Apache::loncoursedata::CL_CAMANAGER(); |
|
foreach my $key (keys(%{$index})) { |
foreach my $key (keys(%{$index})) { |
$keylist->[$index->{$key}] = $key; |
$keylist->[$index->{$key}] = $key; |
} |
} |
Line 2615 sub show_users_list {
|
Line 2516 sub show_users_list {
|
(($env{'form.showrole'} eq 'Any') || ($env{'form.showrole'} eq 'au'))) { |
(($env{'form.showrole'} eq 'Any') || ($env{'form.showrole'} eq 'au'))) { |
push(@sortable,('authorusage','authorquota')); |
push(@sortable,('authorusage','authorquota')); |
} |
} |
if ($context eq 'author') { |
|
push(@sortable,'manager'); |
|
} |
|
} |
} |
if ($mode eq 'pickauthor') { |
if ($mode eq 'pickauthor') { |
@sortable = ('username','fullname','email','status'); |
@sortable = ('username','fullname','email','status'); |
Line 2935 END
|
Line 2833 END
|
foreach my $idx (@$keylist) { |
foreach my $idx (@$keylist) { |
$index{$idx} = $i++; |
$index{$idx} = $i++; |
} |
} |
my $now = time; |
|
my $usercount = 0; |
my $usercount = 0; |
my ($secfilter,$grpfilter); |
my ($secfilter,$grpfilter); |
if ($context eq 'course') { |
if ($context eq 'course') { |
Line 2953 END
|
Line 2850 END
|
Future => 'Future', |
Future => 'Future', |
Expired => 'Expired', |
Expired => 'Expired', |
); |
); |
my (%crslogins,%camanagers); |
# If this is for a single course get last course "log-in". |
|
my %crslogins; |
if ($context eq 'course') { |
if ($context eq 'course') { |
# If this is for a single course get last course "log-in". |
|
%crslogins=&Apache::lonnet::dump('nohist_crslastlogin',$cdom,$cnum); |
%crslogins=&Apache::lonnet::dump('nohist_crslastlogin',$cdom,$cnum); |
} elsif ($context eq 'author') { |
|
map { $camanagers{$_.':ca'} = 1; } split(/,/,$env{'environment.authormanagers'}); |
|
} |
} |
# Get groups, role, permanent e-mail so we can sort on them if |
# Get groups, role, permanent e-mail so we can sort on them if |
# necessary. |
# necessary. |
Line 3058 END
|
Line 2953 END
|
} |
} |
} |
} |
} |
} |
if ($context eq 'author') { |
|
if (($camanagers{$user}) && |
|
((!defined($userlist->{$user}->[$index{'end'}])) || |
|
($userlist->{$user}->[$index{'end'}] == 0) || |
|
($userlist->{$user}->[$index{'end'}] > $now))) { |
|
$userlist->{$user}->[$index{'manager'}] = &mt('Yes'); |
|
} else { |
|
$userlist->{$user}->[$index{'manager'}] = &mt('No'); |
|
} |
|
} |
|
my %emails = &Apache::loncommon::getemails($uname,$udom); |
my %emails = &Apache::loncommon::getemails($uname,$udom); |
if ($emails{'permanentemail'} =~ /\S/) { |
if ($emails{'permanentemail'} =~ /\S/) { |
$userlist->{$user}->[$index{'email'}] = $emails{'permanentemail'}; |
$userlist->{$user}->[$index{'email'}] = $emails{'permanentemail'}; |
Line 3636 END
|
Line 3521 END
|
setSections(formname,'$crstype'); |
setSections(formname,'$crstype'); |
if (seccheck == 'ok') { |
if (seccheck == 'ok') { |
opener.document.$callingform.newsecs.value = formname.sections.value; |
opener.document.$callingform.newsecs.value = formname.sections.value; |
} else { |
|
return; |
|
} |
} |
END |
END |
} else { |
} else { |
Line 4222 sub print_first_users_upload_form {
|
Line 4105 sub print_first_users_upload_form {
|
.&Apache::lonhtmlcommon::end_pick_box(); |
.&Apache::lonhtmlcommon::end_pick_box(); |
|
|
$str .= '<p>' |
$str .= '<p>' |
.'<input type="button" name="fileupload" value="'.&mt('Next').'"' |
.'<input type="submit" name="fileupload" value="'.&mt('Next').'"' |
.' onclick="javascript:checkUpload(this.form);" />' |
.' onclick="javascript:checkUpload(this.form);" />' |
.'</p>'; |
.'</p>'; |
|
|
Line 4250 sub upfile_drop_add {
|
Line 4133 sub upfile_drop_add {
|
$fields{$env{'form.f'.$i}}=$keyfields[$i]; |
$fields{$env{'form.f'.$i}}=$keyfields[$i]; |
} |
} |
} |
} |
|
if ($env{'form.fullup'} ne 'yes') { |
|
$r->print('<form name="studentform" method="post" action="/adm/createuser">'."\n". |
|
'<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'); |
|
} |
# |
# |
# Store the field choices away |
# Store the field choices away |
my @storefields = qw/username names fname mname lname gen id |
my @storefields = qw/username names fname mname lname gen id |
Line 4263 sub upfile_drop_add {
|
Line 4150 sub upfile_drop_add {
|
$fieldstype{$field.'_choice'} = 'scalar'; |
$fieldstype{$field.'_choice'} = 'scalar'; |
} |
} |
&Apache::loncommon::store_course_settings('enrollment_upload',\%fieldstype); |
&Apache::loncommon::store_course_settings('enrollment_upload',\%fieldstype); |
my ($cid,$crstype,$setting,$crsdom,$crsnum,$oldcrsuserdoms,%emptyok); |
my ($cid,$crstype,$setting,$crsdom); |
if ($context eq 'domain') { |
if ($context eq 'domain') { |
$setting = $env{'form.roleaction'}; |
$setting = $env{'form.roleaction'}; |
if (exists($fields{'names'})) { |
|
map { $emptyok{$_} = 1; } ('lastname','firstname','middlename'); |
|
} else { |
|
if (exists($fields{'lname'})) { |
|
$emptyok{'lastname'} = 1; |
|
} |
|
if (exists($fields{'fname'})) { |
|
$emptyok{'firstname'} = 1; |
|
} |
|
if (exists($fields{'mname'})) { |
|
$emptyok{'middlename'} = 1; |
|
} |
|
} |
|
if (exists($fields{'gen'})) { |
|
$emptyok{'generation'} = 1; |
|
} |
|
} |
} |
if ($env{'request.course.id'} ne '') { |
if ($env{'request.course.id'} ne '') { |
$cid = $env{'request.course.id'}; |
$cid = $env{'request.course.id'}; |
$crstype = &Apache::loncommon::course_type(); |
$crstype = &Apache::loncommon::course_type(); |
$crsdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
$crsdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
$crsnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
} elsif ($setting eq 'course') { |
} elsif ($setting eq 'course') { |
if (&Apache::lonnet::is_course($env{'form.dcdomain'},$env{'form.dccourse'})) { |
if (&Apache::lonnet::is_course($env{'form.dcdomain'},$env{'form.dccourse'})) { |
$cid = $env{'form.dcdomain'}.'_'.$env{'form.dccourse'}; |
$cid = $env{'form.dcdomain'}.'_'.$env{'form.dccourse'}; |
$crstype = &Apache::loncommon::course_type($cid); |
$crstype = &Apache::loncommon::course_type($cid); |
$crsdom = $env{'form.dcdomain'}; |
$crsdom = $env{'form.dcdomain'}; |
$crsnum = $env{'form.dccourse'}; |
|
if (exists($env{'course.'.$cid.'.internal.userdomains'})) { |
|
$oldcrsuserdoms = 1; |
|
} |
|
my %coursedesc = &Apache::lonnet::coursedescription($cid,{ one_time => 1 }); |
|
$env{'course.'.$cid.'.internal.userdomains'} = $coursedesc{'internal.userdomains'}; |
|
} |
} |
} |
} |
my ($startdate,$enddate) = &get_dates_from_form(); |
my ($startdate,$enddate) = &get_dates_from_form(); |
Line 4309 sub upfile_drop_add {
|
Line 4173 sub upfile_drop_add {
|
my $defdom=$env{'request.role.domain'}; |
my $defdom=$env{'request.role.domain'}; |
my $domain; |
my $domain; |
if ($env{'form.defaultdomain'} ne '') { |
if ($env{'form.defaultdomain'} ne '') { |
$domain = $env{'form.defaultdomain'}; |
if (($context eq 'course') || ($setting eq 'course')) { |
|
if ($env{'form.defaultdomain'} eq $crsdom) { |
|
$domain = $env{'form.defaultdomain'}; |
|
} else { |
|
if (&Apache::lonnet::will_trust('enroll',$crsdom,$env{'form.defaultdomain'})) { |
|
$domain = $env{'form.defaultdomain'}; |
|
} else { |
|
$r->print('<span class="LC_error">'.&mt('Error'). |
|
&mt('Enrollment of users not permitted for specified default domain: [_1].', |
|
&Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'</span>'); |
|
if ($env{'form.fullup'} ne 'yes') { |
|
$r->print('</form>'); |
|
} |
|
return; |
|
} |
|
} |
|
} elsif ($context eq 'author') { |
|
if ($env{'form.defaultdomain'} eq $defdom) { |
|
$domain = $env{'form.defaultdomain'}; |
|
} else { |
|
if ((&Apache::lonnet::will_trust('othcoau',$defdom,$env{'form.defaultdomain'})) && |
|
(&Apache::lonnet::will_trust('coaurem',$env{'form.defaultdomain'},$defdom))) { |
|
$domain = $env{'form.defaultdomain'}; |
|
} else { |
|
$r->print('<span class="LC_error">'.&mt('Error'). |
|
&mt('Addition of users not permitted for specified default domain: [_1].', |
|
&Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'</span>'); |
|
if ($env{'form.fullup'} ne 'yes') { |
|
$r->print('</form>'); |
|
} |
|
return; |
|
} |
|
} |
|
} elsif (($context eq 'domain') && ($setting eq 'domain')) { |
|
if ($env{'form.defaultdomain'} eq $defdom) { |
|
$domain = $env{'form.defaultdomain'}; |
|
} else { |
|
if (&Apache::lonnet::will_trust('domroles',$defdom,$env{'form.defaultdomain'})) { |
|
$domain = $env{'form.defaultdomain'}; |
|
} else { |
|
$r->print('<span class="LC_error">'.&mt('Error'). |
|
&mt('Addition of users not permitted for specified default domain: [_1].', |
|
&Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'</span>'); |
|
if ($env{'form.fullup'} ne 'yes') { |
|
$r->print('</form>'); |
|
} |
|
return; |
|
} |
|
} |
|
} |
} else { |
} else { |
$domain = $defdom; |
$domain = $defdom; |
} |
} |
Line 4319 sub upfile_drop_add {
|
Line 4232 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('<p class="LC_error">'.&mt('Error').': '. |
$r->print('<span class="LC_error">'.&mt('Error'). |
&mt('Invalid home server specified').'</p>'); |
&mt('Invalid home server specified').'</span>'); |
$r->print(&Apache::loncommon::end_page()); |
if ($env{'form.fullup'} ne 'yes') { |
return 'invalidhome'; |
$r->print('</form>'); |
|
} |
|
return; |
} |
} |
} |
} |
# Determine authentication mechanism |
# Determine authentication mechanism |
Line 4332 sub upfile_drop_add {
|
Line 4247 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 4341 sub upfile_drop_add {
|
Line 4255 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'; |
Line 4421 sub upfile_drop_add {
|
Line 4333 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 4498 sub upfile_drop_add {
|
Line 4406 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); |
foreach my $line (@userdata) { |
foreach my $line (@userdata) { |
$counter ++; |
$counter ++; |
my @secs; |
my @secs; |
Line 4548 sub upfile_drop_add {
|
Line 4456 sub upfile_drop_add {
|
'"<b>'.$entries{$fields{'domain'}}.'</b>"', |
'"<b>'.$entries{$fields{'domain'}}.'</b>"', |
$fname,$mname,$lname,$gen); |
$fname,$mname,$lname,$gen); |
next; |
next; |
|
} elsif ($entries{$fields{'domain'}} ne $domain) { |
|
my $possdom = $entries{$fields{'domain'}}; |
|
if ($context eq 'course' || $setting eq 'course') { |
|
unless ($trustchecked{$possdom}) { |
|
$willtrust{$possdom} = &Apache::lonnet::will_trust('enroll',$domain,$possdom); |
|
$trustchecked{$possdom} = 1; |
|
} |
|
} elsif ($context eq 'author') { |
|
unless ($trustchecked{$possdom}) { |
|
$willtrust{$possdom} = &Apache::lonnet::will_trust('othcoau',$domain,$possdom); |
|
} |
|
if ($willtrust{$possdom}) { |
|
$willtrust{$possdom} = &Apache::lonnet::will_trust('coaurem',$possdom,$domain); |
|
} |
|
} |
|
unless ($willtrust{$possdom}) { |
|
$disallow{$counter} = |
|
&mt('Unacceptable domain [_1] for user [_2] [_3] [_4] [_5]', |
|
'"<b>'.$possdom.'</b>"', |
|
$fname,$mname,$lname,$gen); |
|
next; |
|
} |
} |
} |
my $username = $entries{$fields{'username'}}; |
my $username = $entries{$fields{'username'}}; |
my $userdomain = $entries{$fields{'domain'}}; |
my $userdomain = $entries{$fields{'domain'}}; |
Line 4627 sub upfile_drop_add {
|
Line 4557 sub upfile_drop_add {
|
} |
} |
} |
} |
# determine user password |
# determine user password |
my $password; |
my $password = $genpwd; |
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 4935 sub upfile_drop_add {
|
Line 4833 sub upfile_drop_add {
|
my (%userres,%authres,%roleres,%idres); |
my (%userres,%authres,%roleres,%idres); |
my $singlesec = ''; |
my $singlesec = ''; |
if ($role eq 'st') { |
if ($role eq 'st') { |
if (($context eq 'domain') && ($changeauth eq 'Yes') && (!$newuser)) { |
|
if ((&Apache::lonnet::allowed('mau',$userdomain)) && |
|
(&Apache::lonnet::homeserver($username,$userdomain) ne 'no_host')) { |
|
if ((($amode =~ /^krb4|krb5|internal$/) && $password ne '') || |
|
($amode eq 'localauth')) { |
|
$authresult = |
|
&Apache::lonnet::modifyuserauth($userdomain,$username,$amode,$password); |
|
} |
|
} |
|
} |
|
my $sec; |
my $sec; |
if (ref($userinfo{$i}{'sections'}) eq 'ARRAY') { |
if (ref($userinfo{$i}{'sections'}) eq 'ARRAY') { |
if (@secs > 0) { |
if (@secs > 0) { |
Line 4986 sub upfile_drop_add {
|
Line 4874 sub upfile_drop_add {
|
} |
} |
} |
} |
} |
} |
} |
if (!$multiple) { |
if (!$multiple) { |
($userresult,$authresult,$roleresult,$idresult) = |
($userresult,$authresult,$roleresult,$idresult) = |
&modifyuserrole($context,$setting, |
&modifyuserrole($context,$setting, |
$changeauth,$cid,$userdomain,$username, |
$changeauth,$cid,$userdomain,$username, |
$id,$amode,$password,$fname, |
$id,$amode,$password,$fname, |
$mname,$lname,$gen,$singlesec, |
$mname,$lname,$gen,$singlesec, |
$env{'form.forceid'},$desiredhost, |
$env{'form.forceid'},$desiredhost, |
$email,$role,$enddate,$startdate, |
$email,$role,$enddate,$startdate, |
$checkid,$inststatus); |
$checkid,$inststatus,\%emptyok); |
} |
} |
} |
} |
} |
if ($multiple) { |
if ($multiple) { |
Line 5017 sub upfile_drop_add {
|
Line 4905 sub upfile_drop_add {
|
} # end of loop |
} # end of loop |
$r->print('</ul>'); |
$r->print('</ul>'); |
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
if (($context eq 'domain') && ($setting eq 'course')) { |
|
unless ($oldcrsuserdoms) { |
|
if (exists($env{'course.'.$cid.'.internal.userdomains'})) { |
|
delete($env{'course.'.$cid.'.internal.userdomains'}); |
|
} |
|
} |
|
} |
|
} |
} |
# Flush the course logs so reverse user roles immediately updated |
# Flush the course logs so reverse user roles immediately updated |
$r->register_cleanup(\&Apache::lonnet::flushcourselogs); |
$r->register_cleanup(\&Apache::lonnet::flushcourselogs); |
Line 5031 sub upfile_drop_add {
|
Line 4912 sub upfile_drop_add {
|
"</p>\n"); |
"</p>\n"); |
if ($counts{'role'} > 0) { |
if ($counts{'role'} > 0) { |
$r->print("<p>\n". |
$r->print("<p>\n". |
&mt('Roles added for [quant,_1,user].',$counts{'role'}).' '. |
&mt('Roles added for [quant,_1,user].',$counts{'role'}).' '.&mt('If a user is currently logged-in to LON-CAPA, any new roles which are active will be available when the user next logs in.')."</p>\n"); |
&mt('If a user is currently logged-in to LON-CAPA, any new roles which are active will be available when the user next logs in.'). |
|
"</p>\n"); |
|
} else { |
} else { |
$r->print('<p>'.&mt('No roles added').'</p>'); |
$r->print('<p>'.&mt('No roles added').'</p>'); |
} |
} |
Line 5043 sub upfile_drop_add {
|
Line 4922 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 5052 sub upfile_drop_add {
|
Line 4930 sub upfile_drop_add {
|
# Get current classlist |
# Get current classlist |
my $classlist = &Apache::loncoursedata::get_classlist(); |
my $classlist = &Apache::loncoursedata::get_classlist(); |
if (! defined($classlist)) { |
if (! defined($classlist)) { |
$r->print('<p class="LC_info">'. |
$r->print('<form name="studentform" method="post" action="/adm/createuser">'. |
&mt('There are no students with current/future access to the course.'). |
'<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'. |
'</p>'."\n"); |
'<p class="LC_info">'.&mt('There are no students with current/future access to the course.').'</p>'. |
|
'</form>'."\n"); |
} elsif (ref($classlist) eq 'HASH') { |
} elsif (ref($classlist) eq 'HASH') { |
# Remove the students we just added from the list of students. |
# Remove the students we just added from the list of students. |
foreach my $line (@userdata) { |
foreach my $line (@userdata) { |
Line 5070 sub upfile_drop_add {
|
Line 4949 sub upfile_drop_add {
|
} |
} |
} |
} |
} # end of unless |
} # end of unless |
return 'ok'; |
if ($env{'form.fullup'} ne 'yes') { |
|
$r->print('</form>'); |
|
} |
} |
} |
|
|
sub print_namespacing_alerts { |
sub print_namespacing_alerts { |
Line 5113 sub print_namespacing_alerts {
|
Line 4994 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'}) { |
|
my $min = $passwdconf{'min'}; |
|
if ($min eq '') { |
|
$min = $Apache::lonnet::passwdmin; |
|
} |
|
$warning .= '<li>'.&mt('minimum [quant,_1,character]',$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 6018 sub can_modify_userinfo {
|
Line 5863 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 6202 sub get_permission {
|
Line 5983 sub get_permission {
|
$permission{'selfenrolladmin'} = 1; |
$permission{'selfenrolladmin'} = 1; |
} |
} |
} |
} |
unless ($permission{'selfenrolladmin'}) { |
|
$permission{'selfenrollview'} = 1; |
|
} |
|
} |
} |
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
my $user; |
my $user = $env{'user.name'}.':'.$env{'user.domain'}; |
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 6224 sub get_permission {
|
Line 5996 sub get_permission {
|
} |
} |
} |
} |
} elsif ($context eq 'author') { |
} elsif ($context eq 'author') { |
my $audom = $env{'request.role.domain'}; |
$permission{'cusr'} = &authorpriv($env{'user.name'},$env{'request.role.domain'}); |
my $auname = $env{'user.name'}; |
$permission{'view'} = $permission{'cusr'}; |
if ((&Apache::lonnet::allowed('cca',"$audom/$auname")) || |
|
(&Apache::lonnet::allowed('caa',"$audom/$auname"))) { |
|
$permission{'author'} = 1; |
|
$permission{'cusr'} = 1; |
|
$permission{'view'} = 1; |
|
} |
|
} elsif ($context eq 'coauthor') { |
|
my ($audom,$auname) = ($env{'request.role'} =~ m{^ca\./($match_domain)/($match_username)$}); |
|
if ((&Apache::lonnet::allowed('vca',"$audom/$auname")) || |
|
(&Apache::lonnet::allowed('vaa',"$audom/$auname"))) { |
|
if ($env{"environment.internal.manager./$audom/$auname"}) { |
|
$permission{'cusr'} = 1; |
|
$permission{'view'} = 1; |
|
} |
|
} |
|
} else { |
} else { |
my @allroles = &roles_by_context($context); |
my @allroles = &roles_by_context($context); |
foreach my $role (@allroles) { |
foreach my $role (@allroles) { |
Line 6268 sub get_permission {
|
Line 6025 sub get_permission {
|
} |
} |
} |
} |
my $allowed = 0; |
my $allowed = 0; |
foreach my $key (keys(%permission)) { |
foreach my $perm (values(%permission)) { |
next if (($key eq 'owner') || ($key eq 'co-owner') || ($key eq 'author')); |
if ($perm) { $allowed=1; last; } |
if ($permission{$key}) { $allowed=1; last; } |
|
} |
} |
return (\%permission,$allowed); |
return (\%permission,$allowed); |
} |
} |
Line 6283 sub authorpriv {
|
Line 6039 sub authorpriv {
|
|| (&Apache::lonnet::allowed('caa',$audom.'/'.$auname))) { return ''; } return 1; |
|| (&Apache::lonnet::allowed('caa',$audom.'/'.$auname))) { return ''; } return 1; |
} |
} |
|
|
sub coauthorpriv { |
|
my ($auname,$audom)=@_; |
|
my $uname = $env{'user.name'}; |
|
my $udom = $env{'user.domain'}; |
|
if (((&Apache::lonnet::allowed('vca',"$udom/$uname")) || |
|
(&Apache::lonnet::allowed('vaa',"$udom/$uname"))) && |
|
($env{"environment.internal.manager./$audom/$auname"})) { |
|
return 1; |
|
} |
|
return ''; |
|
} |
|
|
|
sub roles_on_upload { |
sub roles_on_upload { |
my ($context,$setting,$crstype,%customroles) = @_; |
my ($context,$setting,$crstype,%customroles) = @_; |
my (@possible_roles,@permitted_roles); |
my (@possible_roles,@permitted_roles); |
Line 6331 sub get_course_identity {
|
Line 6075 sub get_course_identity {
|
} |
} |
|
|
sub dc_setcourse_js { |
sub dc_setcourse_js { |
my ($formname,$mode,$context,$showcredits,$domain) = @_; |
my ($formname,$mode,$context,$showcredits) = @_; |
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 6340 sub dc_setcourse_js {
|
Line 6084 sub dc_setcourse_js {
|
if ($mode eq 'upload') { |
if ($mode eq 'upload') { |
$role = 'courserole'; |
$role = 'courserole'; |
} else { |
} else { |
$authen_check = &verify_authen($formname,$context,$domain); |
$authen_check = &verify_authen($formname,$context); |
} |
} |
$dc_setcourse_code = (<<"SCRIPTTOP"); |
$dc_setcourse_code = (<<"SCRIPTTOP"); |
$authen_check |
$authen_check |
Line 6484 ENDSCRIPT
|
Line 6228 ENDSCRIPT
|
} |
} |
|
|
sub verify_authen { |
sub verify_authen { |
my ($formname,$context,$domain) = @_; |
my ($formname,$context) = @_; |
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) = |
|
&Apache::loncommon::passwd_validation_js('argpicked',$domain); |
|
my $outcome = <<"ENDSCRIPT"; |
my $outcome = <<"ENDSCRIPT"; |
|
|
function auth_check() { |
function auth_check() { |
Line 6525 function auth_check() {
|
Line 6267 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 6539 function auth_check() {
|
Line 6280 function auth_check() {
|
alert(alertmsg); |
alert(alertmsg); |
return; |
return; |
} |
} |
} else if (logintype == 'int') { |
|
var numrules = $numrules; |
|
if (numrules > 0) { |
|
$intargjs |
|
} |
|
} |
} |
$finish |
$finish |
} |
} |
Line 6695 sub selfenrollment_administration {
|
Line 6431 sub selfenrollment_administration {
|
} |
} |
} |
} |
if ($settings{'internal.selfenrollmgrdc'} ne '') { |
if ($settings{'internal.selfenrollmgrdc'} ne '') { |
@in_domain = split(/,/,$settings{'internal.selfenrollmgrdc'}); |
my @in_domain = split(/,/,$settings{'internal.selfenrollmgrdc'}); |
my @diffs = &Apache::loncommon::compare_arrays(\@in_domain,$possconfigs); |
my @diffs = &Apache::loncommon::compare_arrays(\@in_domain,$possconfigs); |
unless (@diffs) { |
unless (@diffs) { |
return (\@in_course,\@in_domain); |
return (\@in_course,\@in_domain); |