--- loncom/auth/lonroles.pm 2004/11/12 23:29:55 1.109 +++ loncom/auth/lonroles.pm 2004/11/14 18:27:08 1.110 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.109 2004/11/12 23:29:55 raeburn Exp $ +# $Id: lonroles.pm,v 1.110 2004/11/14 18:27:08 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -84,6 +84,10 @@ sub handler { my $envkey; my %dcroles = (); my $numdc = &check_fordc(\%dcroles,$then); + my %recentroles; + if ($numdc > 0) { + %recentroles = &Apache::lonnet::dump(&recent_filename('roles')); + } # ================================================================== Roles Init if ($ENV{'form.selectrole'}) { @@ -100,27 +104,29 @@ sub handler { "request.role.adv" => $ENV{'user.adv'}, "request.role.domain" => $ENV{'user.domain'}); -# Check to see if the user is a DC trying to enter a course and needs privs to be created +# Check if user is a DC trying to enter a course and needs privs to be created if ($numdc > 0) { foreach my $envkey (keys %ENV) { if ($envkey =~ m-^form\.cc\./(\w+)/(\w+)$-) { if ($dcroles{$1}) { my $cckey = 'user.role.cc./'.$1.'/'.$2; - if ($ENV{$cckey}) { - my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend,$tfont); - &role_status($cckey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend); - unless (($tstatus eq 'is') || ($tstatus eq 'will_not')) { - &set_privileges($1,$2); - } - } else { - &set_privileges($1,$2); - } + &check_privs($cckey,$then,$now); } last; } } } +# Check if user is a DC with courses in the recent list which need privs. +# if ($numdc > 0) { +# %recentroles = &Apache::lonnet::dump(&recent_filename('recent_roles')); +# foreach my $rolekey (keys %recentroles) { +# if ($rolekey =~ m-^user\.role.cc\./\w+/\w+$-) { +# &check_privs($rolekey,$then,$now); +# } +# } +# } + foreach $envkey (keys %ENV) { next if ($envkey!~/^user\.role\./); my ($where,$trolecode,$role,$tstatus,$tend,$tstart); @@ -268,8 +274,8 @@ ENDENTERKEY my $formaction = '/adm/roles/'; my ($dcdom,$pickedcourse) = split/_/,$courseid; if ($ENV{'user.role.dc./'.$dcdom.'/'}) { - &Apache::lonhtmlcommon::store_recent('recent_roles', - $courseid,$formaction); + &Apache::lonhtmlcommon::store_recent('roles', + $envkey,$formaction); } } # @@ -551,40 +557,7 @@ ENDHEADER } $roletext.=''; - unless ($nochoose) { - if (!$button) { - if ($switchserver) { - $roletext.=''.&mt('Switch Server').''; - } else { - $roletext.=(' '); - } - } elsif ($tstatus eq 'is') { - $roletext.=(''); - } elsif ($tryagain) { - $roletext.= - ''; - } elsif ($advanced) { - $roletext.= - ''; - } else { - $roletext.=' '; - } - } - $tremark.=&Apache::lonannounce::showday(time,1, - &Apache::lonannounce::readcalendar($tdom.'_'.$trest)); - - $roletext.=''.$trole. - ''.$ttype. - ''.$twhere. - ''.$tpstart. - ''.$tpend. - ''.$tremark. - ' '."\n"; + $roletext.=&build_roletext($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$ttype,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver); $roletext{$envkey}=$roletext; if (!$sortkey) {$sortkey=$twhere."\0".$envkey;} $sortrole{$sortkey}=$envkey; @@ -632,7 +605,7 @@ ENDHEADER if ($haverole) { $doheaders++; } } if ($numdc > 0) { - &select_recent_courses($r,\%roletext); + &display_recent_roles($r,\%roletext,\%recentroles); } foreach my $type ('Construction Space','Course','Domain','System') { my $output; @@ -768,6 +741,60 @@ sub role_status { } } +sub build_roletext { + my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$ttype,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver) = @_; + my $roletext=''; + unless ($nochoose) { + if (!$button) { + if ($switchserver) { + $roletext.=''.&mt('Switch Server').''; + } else { + $roletext.=(' '); + } + } elsif ($tstatus eq 'is') { + $roletext.=(''); + } elsif ($tryagain) { + $roletext.= + ''; + } elsif ($advanced) { + $roletext.= + ''; + } else { + $roletext.=' '; + } + } + $tremark.=&Apache::lonannounce::showday(time,1, + &Apache::lonannounce::readcalendar($tdom.'_'.$trest)); + + + $roletext.=''.$trole. + ''.$ttype. + ''.$twhere. + ''.$tpstart. + ''.$tpend. + ''.$tremark. + ' '."\n"; + return $roletext; +} + +sub check_privs { + my ($cckey,$then,$now) = @_; + if ($ENV{$cckey}) { + my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend,$tfont); + &role_status($cckey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend); + unless (($tstatus eq 'is') || ($tstatus eq 'will_not')) { + &set_privileges($1,$2); + } + } else { + &set_privileges($1,$2); + } +} + sub check_fordc { my ($dcroles,$then) = @_; my $numdc = 0; @@ -873,23 +900,41 @@ END return $process_pick; } -sub select_recent_courses { - my ($r,$roletext)=@_; +sub display_recent_roles { + my ($r,$roletext,$recentroles)=@_; my $advanced = $ENV{'user.adv'}; my $tryagain = $ENV{'form.tryagain'}; - my %recent=&Apache::lonnet::dump(&recent_filename('recent_roles')); my $numrecent = 0; my $roledisplay = ''. ''. &mt('Recent courses accessed by DC'). ''."\n"; - foreach my $courseid (sort keys %recent) { - unless ($courseid =~/^error\:/) { - print STDERR "$courseid\n"; - my ($dom,$crs) = split/_/,$courseid; + foreach my $rolekey (sort keys %{$recentroles}) { + unless ($rolekey =~/^error\:/) { + unless ($$roletext{$rolekey}) { + if ($rolekey =~ m-^user\.role.cc\./(\w+)/(\w+)$-) { + my $tcourseid = $1.'_'.$2; + my $trolecode = 'cc./'.$1.'/'.$2; + my $trole = Apache::lonnet::plaintext('cc'); + my $twhere; + my $tbg='#77FF77'; + my $tfont='#003300'; + my %newhash=&Apache::lonnet::coursedescription($tcourseid); + if (%newhash) { + $twhere=$newhash{'description'}. + ' '. + &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$2,$1,$tfont). + ''; + } else { + $twhere=&mt('Currently not available'); + $ENV{'course.'.$tcourseid.'.description'}=$twhere; + } + $twhere.="
".&mt('Domain').":".$1; + $$roletext{$rolekey} = &build_roletext($trolecode,$1,$2,'is',$tryagain,$advanced,'',$tbg,$tfont,$trole,&mt('Course'),$twhere,'','','',1,''); + } + } + $roledisplay.=$$roletext{$rolekey}; $numrecent ++; - my $crskey = 'user.role.cc./'.$dom.'/'.$crs; - $roledisplay.=$$roletext{$crskey}; } } if ($numrecent > 0) {