--- loncom/interface/loncommon.pm 2009/12/15 05:08:50 1.925.2.5 +++ loncom/interface/loncommon.pm 2010/01/18 15:44:35 1.925.2.10 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.925.2.5 2009/12/15 05:08:50 raeburn Exp $ +# $Id: loncommon.pm,v 1.925.2.10 2010/01/18 15:44:35 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -10697,6 +10697,60 @@ sub _add_to_env { } } +sub new_roles_update { + my $rolecount = 0; + foreach my $envkey (keys(%env)) { + next unless ($envkey =~ /^user\.role\./); + $rolecount ++; + } + my $newrolecount = 0; + if (!$rolecount) { + my %userenv; + foreach my $crstype ('official','unofficial','community') { + $userenv{'canrequest.'.$crstype} = + &Apache::lonnet::usertools_access($env{'user.name'}, + $env{'user.domain'},$crstype,'reload','requestcourses'); + } + my $then=$env{'user.login.time'}; + my $refresh=time; + my (%userroles,%allroles,%allgroups,@newroles); + my %roleshash = + &Apache::lonnet::get_my_roles($env{'user.name'},$env{'user.domain'},'userroles',['active','future','previous'],undef,undef,1); + foreach my $item (keys(%roleshash)) { + my ($uname,$udom,$role,$section) = split(':',$item); + my $where = '/'.$udom.'/'.$uname; + my ($tstart,$tend) = split(':',$roleshash{$item}); + if ($section ne '') { + $where .= '/'.$section; + } + my $spec = $role.'.'.$where; + &Apache::lonnet::set_arearole($role,$where,$tstart,$tend, + $env{'user.domain'},$env{'user.name'}); + $userroles{'user.role.'.$spec} = $tstart.'.'.$tend; + $newrolecount ++; + unless (grep(/^\Q$role\E$/,@newroles)) { + push(@newroles,$role); + } + my $status = + &Apache::lonnet::curr_role_status($tstart,$tend,$refresh,$then); + if ($status eq 'active') { + &Apache::lonnet::gather_roleprivs(\%allroles,\%allgroups,\%userroles, + $where,$role,$tstart,$tend); + } + } + if (@newroles) { + my ($author,$adv) = &Apache::lonnet::set_userprivs(\%userroles,\%allroles, + \%allgroups); + &Apache::lonnet::appenv(\%userroles,[@newroles,'cm']); + $userenv{'user.adv'} = $adv; + $userenv{'user.author'} = $author; + $userenv{'user.refresh.time'} = $refresh; + } + &Apache::lonnet::appenv(\%userenv); + } + return $newrolecount; +} + # --- Get the symbolic name of a problem and the url sub get_symb { my ($request,$silent) = @_; @@ -10786,9 +10840,9 @@ sub check_for_gci_dc { } sub existing_gcitest_courses { + my ($role) = @_; my %courses; my $cdom = 'gcitest'; - my $role = 'cc'; my $now = time; foreach my $envkey (keys(%env)) { my $cnum; @@ -10797,7 +10851,7 @@ sub existing_gcitest_courses { } else { next; } - my ($tstart,$tend) = split(':',$env{$envkey}); + my ($tstart,$tend) = split('.',$env{$envkey}); if (((!$tstart) || ($tstart < $now)) && ((!$tend) || ($tend > $now))) { my $descr = $env{'course.'.$cdom.'_'.$cnum.'.description'}; if ($descr ne '') {