--- loncom/auth/lonroles.pm 2004/11/12 15:33:32 1.108
+++ loncom/auth/lonroles.pm 2004/12/17 21:44:19 1.115
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# User Roles Screen
#
-# $Id: lonroles.pm,v 1.108 2004/11/12 15:33:32 raeburn Exp $
+# $Id: lonroles.pm,v 1.115 2004/12/17 21:44:19 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -100,14 +100,13 @@ 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}) {
- unless ($ENV{'user.role.cc./'.$1.'/'.$2}) {
- &set_privileges($1,$2);
- }
+ my $cckey = 'user.role.cc./'.$1.'/'.$2;
+ &check_privs($cckey,$then,$now);
}
last;
}
@@ -122,6 +121,13 @@ sub handler {
if ($tstatus eq 'is') {
$where=~s/^\///;
my ($cdom,$cnum,$csec)=split(/\//,$where);
+# store role if recent_role list being kept
+ if ($ENV{'environment.recentroles'}) {
+ &Apache::lonhtmlcommon::store_recent('roles',
+ $trolecode,' ');
+ }
+
+
# check for keyed access
if (($role eq 'st') &&
($ENV{'course.'.$cdom.'_'.$cnum.'.keyaccess'} eq 'yes')) {
@@ -256,16 +262,6 @@ ENDENTERKEY
'.course.helper.not.run'}) {
$furl = "/adm/helper/course.initialization.helper";
}
- # Check to see if the user is a DC selecting a course
- if (($numdc > 0) && ($role eq 'cc')) {
- my $formaction = '/adm/roles/';
- my ($dcdom,$pickedcourse) = split/_/,$courseid;
- if ($ENV{'user.role.dc./'.$dcdom.'/'}) {
- &Apache::lonhtmlcommon::store_recent('recent_roles',
- $courseid,$formaction);
- }
- }
- #
# Send the user to the course they selected
&redirect_user($r,&mt('Entering Course'),
$furl,$msg,
@@ -343,7 +339,7 @@ ENDHEADER
$r->print("
LON-CAPA Access Control ");
$r->print("Access : ".
Apache::lonnet::plaintext($priv)."\n");
- $r->print("Resource: $fn\n");
+ $r->print("Resource: ".&Apache::lonenc::check_encrypt($fn)."\n");
$r->print("Action : $msg\n ");
} else {
if ($ENV{'user.error.msg'}) {
@@ -543,41 +539,7 @@ ENDHEADER
$sortkey=$role.$twhere;
}
- $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;
@@ -624,8 +586,32 @@ ENDHEADER
}
if ($haverole) { $doheaders++; }
}
+
+ if ($ENV{'environment.recentroles'}) {
+ my %recent_roles =
+ &Apache::lonhtmlcommon::get_recent('roles',$ENV{'environment.recentrolesn'});
+ my $output='';
+ foreach (sort(keys(%recent_roles))) {
+ if (defined($roletext{'user.role.'.$_})) {
+ $output.=$roletext{'user.role.'.$_};
+ } elsif ($numdc > 0) {
+ unless ($_ =~/^error\:/) {
+ $output.=&display_cc_role('user.role.'.$_);
+ }
+ }
+ }
+ if ($output) {
+ $r->print("".
+ &mt('Recent Roles')." ");
+ $r->print($output);
+ $r->print(" ");
+ $doheaders ++;
+ }
+ }
+
if ($numdc > 0) {
- &select_recent_courses($r,\%roletext);
+ $r->print(&coursepick_jscript());
+ $r->print(&Apache::loncommon::coursebrowser_javascript());
}
foreach my $type ('Construction Space','Course','Domain','System') {
my $output;
@@ -642,7 +628,7 @@ ENDHEADER
if ($output) {
if ($doheaders > 0) {
$r->print("".
- "".&mt($type)." ");
+ "".&mt($type)." ");
}
$r->print($output);
}
@@ -761,18 +747,60 @@ sub role_status {
}
}
-sub dc_script {
- my $response = (<<"END");
-function setDCchoice(caller) {
- var dcname = "dc./"+caller+"/"
- document.rolechoice.dcselected.value = caller
- document.rolechoice.elements[3].name = dcname
- document.rolechoice.submit()
+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;
}
-END
- return $response;
+
+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;
@@ -796,14 +824,23 @@ sub check_fordc {
sub courselink {
my ($dcdom) = @_;
- my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($dcdom,'dom');
+ my $courseform=&Apache::loncommon::selectcourse_link
+ ('rolechoice','dccourse_'.$dcdom,'dcdomain_'.$dcdom,'coursedesc_'.$dcdom,$dcdom);
+ my $hiddenitems = ' '.
+ ' '.
+ ' '.
+ ' ';
+ return $courseform.$hiddenitems;
+}
+
+sub coursepick_jscript {
my $verify_script = <<"END";
END
- my $courseform=&Apache::loncommon::selectcourse_link
- ('rolechoice','dccourse','dcdomain','coursedesc');
- my $hiddenitems = ' '.
- ' '.
- ' '.
- ' ';
- return $cb_jscript.$verify_script.$courseform.$hiddenitems;
+ return $verify_script;
}
+sub processpick {
+ my $dcdom = shift;
+ my $process_pick = <<"END";
+
+END
+ return $process_pick;
+}
-sub select_recent_courses {
- my ($r,$roletext)=@_;
+sub display_cc_role {
+ my $rolekey = shift;
+ my $roletext;
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\:/) {
- my ($dom,$crs) = split/_/,$courseid;
- $numrecent ++;
- my $crskey = 'user.role.cc./'.$dom.'/'.$crs;
- $roledisplay.=$$roletext{$crskey};
+ unless ($rolekey =~/^error\:/) {
+ 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 = &build_roletext($trolecode,$1,$2,'is',$tryagain,$advanced,'',$tbg,$tfont,$trole,&mt('Course'),$twhere,'','','',1,'');
}
}
- if ($numrecent > 0) {
- $r->print("$roledisplay\n");
- }
+ return $roletext;
}
sub allcourses_row {
- my ($dcdom) = @_;
+ my $dcdom = shift;
my $ccrole = Apache::lonnet::plaintext('cc');
my $selectlink = &courselink($dcdom);
my $output = ''.
' '.
' '.
''.