version 1.1056.2.4, 2010/05/22 13:50:19
|
version 1.1056.4.1, 2010/05/18 04:22:00
|
Line 4028 sub standard_roleprivs {
|
Line 4028 sub standard_roleprivs {
|
} |
} |
|
|
sub set_userprivs { |
sub set_userprivs { |
my ($userroles,$allroles,$allgroups,$groups_roles) = @_; |
my ($userroles,$allroles,$allgroups) = @_; |
my $author=0; |
my $author=0; |
my $adv=0; |
my $adv=0; |
my %grouproles = (); |
my %grouproles = (); |
if (keys(%{$allgroups}) > 0) { |
if (keys(%{$allgroups}) > 0) { |
my @groupkeys; |
|
foreach my $role (keys(%{$allroles})) { |
foreach my $role (keys(%{$allroles})) { |
push(@groupkeys,$role); |
my ($trole,$area,$sec,$extendedarea); |
} |
if ($role =~ m-^(\w+|cr/$match_domain/$match_username/\w+)\.(/$match_domain/$match_courseid)(/?\w*)\.-) { |
if (ref($groups_roles) eq 'HASH') { |
$trole = $1; |
foreach my $key (keys(%{$groups_roles})) { |
$area = $2; |
unless (grep(/^\Q$key\E$/,@groupkeys)) { |
$sec = $3; |
push(@groupkeys,$key); |
$extendedarea = $area.$sec; |
} |
if (exists($$allgroups{$area})) { |
} |
foreach my $group (keys(%{$$allgroups{$area}})) { |
} |
my $spec = $trole.'.'.$extendedarea; |
if (@groupkeys > 0) { |
$grouproles{$spec.'.'.$area.'/'.$group} = |
foreach my $role (@groupkeys) { |
$$allgroups{$area}{$group}; |
my ($trole,$area,$sec,$extendedarea); |
|
if ($role =~ m-^(\w+|cr/$match_domain/$match_username/\w+)\.(/$match_domain/$match_courseid)(/?\w*)\.-) { |
|
$trole = $1; |
|
$area = $2; |
|
$sec = $3; |
|
$extendedarea = $area.$sec; |
|
if (exists($$allgroups{$area})) { |
|
foreach my $group (keys(%{$$allgroups{$area}})) { |
|
my $spec = $trole.'.'.$extendedarea; |
|
$grouproles{$spec.'.'.$area.'/'.$group} = |
|
$$allgroups{$area}{$group}; |
|
} |
|
} |
} |
} |
} |
} |
} |
Line 4104 sub role_status {
|
Line 4091 sub role_status {
|
if ($$tstart<$now) { |
if ($$tstart<$now) { |
if ($$tstart && $$tstart>$refresh) { |
if ($$tstart && $$tstart>$refresh) { |
if (($$where ne '') && ($$role ne '')) { |
if (($$where ne '') && ($$role ne '')) { |
my (%allroles,%allgroups,$group_privs, |
my (%allroles,%allgroups,$group_privs); |
%groups_roles,@rolecodes); |
|
my %userroles = ( |
my %userroles = ( |
'user.role.'.$$role.'.'.$$where => $$tstart.'.'.$$tend |
'user.role.'.$$role.'.'.$$where => $$tstart.'.'.$$tend |
); |
); |
@rolecodes = ('cm'); |
|
my $spec=$$role.'.'.$$where; |
my $spec=$$role.'.'.$$where; |
my ($tdummy,$tdomain,$trest)=split(/\//,$$where); |
my ($tdummy,$tdomain,$trest)=split(/\//,$$where); |
if ($$role =~ /^cr\//) { |
if ($$role =~ /^cr\//) { |
&custom_roleprivs(\%allroles,$$role,$tdomain,$trest,$spec,$$where); |
&custom_roleprivs(\%allroles,$$role,$tdomain,$trest,$spec,$$where); |
push(@rolecodes,'cr'); |
|
} elsif ($$role eq 'gr') { |
} elsif ($$role eq 'gr') { |
push(@rolecodes,$$role); |
|
my %rolehash = &get('roles',[$$where.'_'.$$role],$env{'user.domain'}, |
my %rolehash = &get('roles',[$$where.'_'.$$role],$env{'user.domain'}, |
$env{'user.name'}); |
$env{'user.name'}); |
my ($trole) = split('_',$rolehash{$$where.'_'.$$role},2); |
my $trole = split('_',$rolehash{$$where.'_'.$$role},1); |
(undef,my $group_privs) = split(/\//,$trole); |
(undef,my $group_privs) = split(/\//,$trole); |
$group_privs = &unescape($group_privs); |
$group_privs = &unescape($group_privs); |
&group_roleprivs(\%allgroups,$$where,$group_privs,$$tend,$$tstart); |
&group_roleprivs(\%allgroups,$$where,$group_privs,$$tend,$$tstart); |
my %course_roles = &get_my_roles($env{'user.name'},$env{'user.domain'},'userroles',['active'],['cc','co','in','ta','ep','ad','st','cr'],[$tdomain],1); |
|
if (keys(%course_roles) > 0) { |
|
my ($tnum) = ($trest =~ /^($match_courseid)/); |
|
if ($tdomain ne '' && $tnum ne '') { |
|
foreach my $key (keys(%course_roles)) { |
|
if ($key =~ /^\Q$tnum\E:\Q$tdomain\E:([^:]+):?([^:]*)/) { |
|
my $crsrole = $1; |
|
my $crssec = $2; |
|
if ($crsrole =~ /^cr/) { |
|
unless (grep(/^cr$/,@rolecodes)) { |
|
push(@rolecodes,'cr'); |
|
} |
|
} else { |
|
unless(grep(/^\Q$crsrole\E$/,@rolecodes)) { |
|
push(@rolecodes,$crsrole); |
|
} |
|
} |
|
my $rolekey = $crsrole.'./'.$tdomain.'/'.$tnum; |
|
if ($crssec ne '') { |
|
$rolekey .= '/'.$crssec; |
|
} |
|
$rolekey .= './'; |
|
$groups_roles{$rolekey} = \@rolecodes; |
|
} |
|
} |
|
} |
|
} |
|
} else { |
} else { |
push(@rolecodes,$$role); |
|
&standard_roleprivs(\%allroles,$$role,$tdomain,$spec,$trest,$$where); |
&standard_roleprivs(\%allroles,$$role,$tdomain,$spec,$trest,$$where); |
} |
} |
my ($author,$adv)= &set_userprivs(\%userroles,\%allroles,\%allgroups,\%groups_roles); |
my ($author,$adv)= &set_userprivs(\%userroles,\%allroles,\%allgroups); |
&appenv(\%userroles,\@rolecodes); |
&appenv(\%userroles,[$$role,'cm']); |
&log($env{'user.domain'},$env{'user.name'},$env{'user.home'},"Role ".$role); |
&log($env{'user.domain'},$env{'user.name'},$env{'user.home'},"Role ".$role); |
} |
} |
} |
} |
Line 5857 sub auto_validate_instcode {
|
Line 5812 sub auto_validate_instcode {
|
$homeserver = &domain($cdom,'primary'); |
$homeserver = &domain($cdom,'primary'); |
} |
} |
} |
} |
$response=&unescape(&reply('autovalidateinstcode:'.$cdom.':'. |
my $response=&unescape(&reply('autovalidateinstcode:'.$cdom.':'. |
&escape($instcode).':'.&escape($owner),$homeserver)); |
&escape($instcode).':'.&escape($owner),$homeserver)); |
my ($outcome,$description) = map { &unescape($_); } split('&',$response,2); |
my ($outcome,$description) = map { &unescape($_); } split('&',$response,2); |
return ($outcome,$description); |
return ($outcome,$description); |
} |
} |
Line 6580 sub modifyuser {
|
Line 6535 sub modifyuser {
|
} |
} |
&logthis('Call to modify user '.$udom.', '.$uname.', '.$uid.', '. |
&logthis('Call to modify user '.$udom.', '.$uname.', '.$uid.', '. |
$umode.', '.$first.', '.$middle.', '. |
$umode.', '.$first.', '.$middle.', '. |
$last.', '.$gene.'(forceid: '.$forceid.'; candelete: '.$showcandelete.')'. |
$last.', '.$gene.'(forceid: '.$forceid.'; candelete: '.$showcandelete.')'. |
(defined($desiredhome) ? ' desiredhome = '.$desiredhome : |
(defined($desiredhome) ? ' desiredhome = '.$desiredhome : |
' desiredhome not specified'). |
' desiredhome not specified'). |
' by '.$env{'user.name'}.' at '.$env{'user.domain'}. |
' by '.$env{'user.name'}.' at '.$env{'user.domain'}. |
Line 6644 sub modifyuser {
|
Line 6599 sub modifyuser {
|
} else { |
} else { |
%names = @tmp; |
%names = @tmp; |
} |
} |
# |
|
# If name, email and/or uid are blank (e.g., because an uploaded file |
# If name, email and/or uid are blank (e.g., because an uploaded file |
# of users did not contain them), do not overwrite existing values |
# of users did not contain them), do not overwrite existing values |
# unless field is in $candelete array ref. |
# unless field is in $candelete array ref. |
# |
# |
|
|
my @fields = ('firstname','middlename','lastname','generation', |
my @fields = ('firstname','middlename','lastname','generation', |
'permanentemail','id'); |
'permanentemail','id'); |
my %newvalues; |
my %newvalues; |
Line 6661 sub modifyuser {
|
Line 6616 sub modifyuser {
|
$names{$field} = $middle; |
$names{$field} = $middle; |
} elsif ($field eq 'lastname') { |
} elsif ($field eq 'lastname') { |
$names{$field} = $last; |
$names{$field} = $last; |
} elsif ($field eq 'generation') { |
} elsif ($field eq 'generation') { |
$names{$field} = $gene; |
$names{$field} = $gene; |
} elsif ($field eq 'permanentemail') { |
} elsif ($field eq 'permanentemail') { |
$names{$field} = $email; |
$names{$field} = $email; |
Line 6671 sub modifyuser {
|
Line 6626 sub modifyuser {
|
} |
} |
} |
} |
} |
} |
|
|
if ($first) { $names{'firstname'} = $first; } |
if ($first) { $names{'firstname'} = $first; } |
if (defined($middle)) { $names{'middlename'} = $middle; } |
if (defined($middle)) { $names{'middlename'} = $middle; } |
if ($last) { $names{'lastname'} = $last; } |
if ($last) { $names{'lastname'} = $last; } |
Line 10404 modifyuser($udom,$uname,$uid,$umode,$upa
|
Line 10358 modifyuser($udom,$uname,$uid,$umode,$upa
|
will update user information (firstname,middlename,lastname,generation, |
will update user information (firstname,middlename,lastname,generation, |
permanentemail), and if forceid is true, student/employee ID also. |
permanentemail), and if forceid is true, student/employee ID also. |
A user's institutional affiliation(s) can also be updated. |
A user's institutional affiliation(s) can also be updated. |
User information fields will not be overwritten with empty entries |
User information fields will not be overwritten with empty entries |
unless the field is included in the $candelete array reference. |
unless the field is included in the $candelete array reference. |
This array is included when a single user is modified via "Manage Users", |
This array is included when a single user is modified via "Manage Users", |
or when Autoupdate.pl is run by cron in a domain. |
or when Autoupdate.pl is run by cron in a domain. |