[LON-CAPA-cvs] cvs: loncom /auth lonroles.pm
raeburn
lon-capa-cvs@mail.lon-capa.org
Fri, 12 Nov 2004 15:33:32 -0000
This is a MIME encoded message
--raeburn1100273612
Content-Type: text/plain
raeburn Fri Nov 12 10:33:32 2004 EDT
Modified files:
/loncom/auth lonroles.pm
Log:
DC selection of CC roles. Intermediate page eliminated. Ordering of roles reverted to original order as per v 1.103. Recent courses visited by DC now displayed at top of roles page. "Select Course" link for DC to go to open pickcourse window now displayed on main roles page.
--raeburn1100273612
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20041112103332.txt"
Index: loncom/auth/lonroles.pm
diff -u loncom/auth/lonroles.pm:1.107 loncom/auth/lonroles.pm:1.108
--- loncom/auth/lonroles.pm:1.107 Thu Nov 11 18:17:13 2004
+++ loncom/auth/lonroles.pm Fri Nov 12 10:33:32 2004
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# User Roles Screen
#
-# $Id: lonroles.pm,v 1.107 2004/11/11 23:17:13 raeburn Exp $
+# $Id: lonroles.pm,v 1.108 2004/11/12 15:33:32 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -82,33 +82,11 @@
my $now=time;
my $then=$ENV{'user.login.time'};
my $envkey;
- my $dcselect='';
my %dcroles = ();
my $numdc = &check_fordc(\%dcroles,$then);
# ================================================================== Roles Init
if ($ENV{'form.selectrole'}) {
- if ($ENV{'form.dcselected'}) {
- my $dcdom = $ENV{'form.dcselected'};
- my $dckey = 'user.role.dc./'.$dcdom.'/';
- if ($ENV{$dckey}) {
- my ($dcstart,$dcend)=split(/\./,$ENV{$dckey});
- my $active_dc = 1;
- if ($dcstart) {
- if ($dcstart>$then) {
- $active_dc = 0;
- }
- }
- if ($dcend) {
- if ($dcend < $then) {
- $active_dc = 0;
- }
- }
- if ($active_dc) {
- $dcselect = $dcdom;
- }
- }
- }
if ($ENV{'request.course.id'}) {
my %temp=('logout_'.$ENV{'request.course.id'} => time);
&Apache::lonnet::put('email_status',\%temp);
@@ -136,18 +114,6 @@
}
}
- if ($ENV{'form.dccourse'}) {
- my $dcdom = $ENV{'form.dcdomain'};
- my $pickedcourse = $ENV{'form.dccourse'};
- if ($dcdom && $pickedcourse) {
- unless ($ENV{'user.role.cc./'.$dcdom.'/'.$pickedcourse}) {
- if ($ENV{'user.role.dc./'.$dcdom.'/'}) {
- &set_privileges($dcdom,$pickedcourse);
- }
- }
- }
- }
-
foreach $envkey (keys %ENV) {
next if ($envkey!~/^user\.role\./);
my ($where,$trolecode,$role,$tstatus,$tend,$tstart);
@@ -290,13 +256,12 @@
'.course.helper.not.run'}) {
$furl = "/adm/helper/course.initialization.helper";
}
- # Check to see if the user is a DC coming from the
- # course selection page
- if ($ENV{'form.dccourse'}) {
+ # 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('cc_pickby_dc_'.$dcdom,
+ &Apache::lonhtmlcommon::store_recent('recent_roles',
$courseid,$formaction);
}
}
@@ -324,12 +289,10 @@
return OK;
}
if ($role eq 'dc') {
- unless ($dcselect) {
- my $redirect_url = '/adm/menu/';
- &redirect_user($r,&mt('Loading Domain Coordinator Menu'),
+ my $redirect_url = '/adm/menu/';
+ &redirect_user($r,&mt('Loading Domain Coordinator Menu'),
$redirect_url);
- return OK;
- }
+ return OK;
}
}
}
@@ -345,7 +308,6 @@
return OK if $r->header_only;
my $swinfo=&Apache::lonmenu::rawconfig();
- my $setDCchoice = &dc_script();
my $bodytag=&Apache::loncommon::bodytag('User Roles');
my $helptag='<table><tr><td>'.&Apache::loncommon::help_open_menu('','General Intro','General_Intro','User Roles',1,undef,undef,undef,undef,,&mt("Click here for help")).'</td></td></tr></table>';
$r->print(<<ENDHEADER);
@@ -358,7 +320,6 @@
<script>
$swinfo
window.focus();
-$setDCchoice
</script>
ENDHEADER
@@ -377,12 +338,6 @@
my $tryagain=$ENV{'form.tryagain'};
# -------------------------------------------------------- Generate Page Output
-# -------------------------------------------------------- Domain Coordinator?
- if ($dcselect ne '') {
- &choosecourse_display($r,$dcselect,$then,$now);
- return OK;
- }
-
# --------------------------------------------------------------- Error Header?
if ($error) {
$r->print("<h1>LON-CAPA Access Control</h1>");
@@ -670,69 +625,27 @@
if ($haverole) { $doheaders++; }
}
if ($numdc > 0) {
- $r->print('<tr bgcolor="#BBffBB">'.
- '<td align="center" colspan="7">'.
- '<input type="hidden" name="all_cc_roles" value="1"/>'.
- '<input type="hidden" name="dcselected" value=""/>'.
- &mt('Domain').'</td>');
- foreach my $dcdom (keys %dcroles) {
- my $output = $roletext{$dcroles{$dcdom}};
- my $ccrole = Apache::lonnet::plaintext('cc');
- if ($ENV{'request.role'} =~ m-cc\./$dcdom/-) {
- $output.=$roletext{'user.role.'.$ENV{'request.role'}};
- }
- $r->print($output);
- $r->print('<tr bgcolor="#77FF77">');
- $r->print('<td><input type="button" value="'.
- &mt('Select').'" name="dcpick_'.$dcdom.'/" '.
- 'onClick="setDCchoice('."'$dcdom'".')"></td>'.
- '<td><font color="#002200">'.
- $ccrole.'</font></td><td>'.&mt('Course').'</td>'.
- '<td><font color="#002200"><b>'.&mt('All courses').'</b>'.
- '<br />'.&mt('Domain').':'.$dcdom.'</font>'.
- '<td colspan="4"><font color="#002200">'.
- &mt('Course Coordinator access to all courses in domain').
- ': <b>'.$dcdom.'</b></font></td></tr>'."\n");
- }
- foreach my $type ('Construction Space','Course','Domain','System') {
- my $output;
- foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {
- my $skiprole = 0;
- foreach my $dcdom (keys %dcroles) {
- if ($sortrole{$which} =~ m-(dc)\./$dcdom/-) {
- $skiprole = 1;
- last;
+ &select_recent_courses($r,\%roletext);
+ }
+ foreach my $type ('Construction Space','Course','Domain','System') {
+ my $output;
+ foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {
+ if ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/) {
+ $output.=$roletext{$sortrole{$which}};
+ if ($sortrole{$which} =~ m-dc\./(\w+)/-) {
+ if ($dcroles{$1}) {
+ $output .= &allcourses_row($1);
}
}
- if (($roleclass{$sortrole{$which}} =~ /^\Q$type\E/) && (!$skiprole)) {
- $output.=$roletext{$sortrole{$which}};
- }
- }
- if ($output) {
- if ($doheaders > 0) {
- $r->print("<tr bgcolor='#BBffBB'>".
- "<td align='center' colspan='7'>".&mt($type)."</td>
-");
- }
- $r->print($output);
- }
- }
- } else {
- foreach my $type ('Construction Space','Course','Domain','System') {
- my $output;
- foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {
- if ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/) {
- $output.=$roletext{$sortrole{$which}};
- }
}
- if ($output) {
- if ($doheaders > 0) {
- $r->print("<tr bgcolor='#BBffBB'>".
- "<td align='center' colspan='7'>".&mt($type)."</td>");
- }
- $r->print($output);
+ }
+ if ($output) {
+ if ($doheaders > 0) {
+ $r->print("<tr bgcolor='#BBffBB'>".
+ "<td align='center' colspan='7'>".&mt($type)."</td>");
}
- }
+ $r->print($output);
+ }
}
my $tremark='';
my $tfont='#003300';
@@ -881,21 +794,22 @@
return $numdc;
}
-sub choosecourse_display {
- my ($r,$dcdom,$then,$now) = @_;
+sub courselink {
+ my ($dcdom) = @_;
my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($dcdom,'dom');
my $verify_script = <<"END";
<script>
-function verifyCoursePick() {
- var pickedCourse = document.roles.dccourse.value
- var pickedDomain = document.roles.dcdomain.value
- if (document.roles.dcdomain.value == document.roles.origdom.value) {
+function verifyCoursePick(caller) {
+ var numbutton = getIndex(caller)
+ var pickedCourse = document.rolechoice.dccourse.value
+ var pickedDomain = document.rolechoice.dcdomain.value
+ if (document.rolechoice.dcdomain.value == document.rolechoice.origdom.value) {
if (pickedCourse != '') {
- var courseTarget = "cc./"+pickedDomain+"/"+pickedCourse
- document.roles.elements[0].value = 1
- document.roles.elements[0].name = courseTarget
- document.roles.selectrole.value = 1
- document.roles.submit()
+ if (numbutton != -1) {
+ var courseTarget = "cc./"+pickedDomain+"/"+pickedCourse
+ document.rolechoice.elements[numbutton+1].name = courseTarget
+ document.rolechoice.submit()
+ }
}
else {
alert("You must use the 'Select Course' link to open a separate pick course window which you can use to select the course you wish to enter");
@@ -905,129 +819,70 @@
alert("You can only use this screen to select courses in the current domain")
}
}
+
+function getIndex(what) {
+ for (var i=0;i<document.rolechoice.elements.length;i++) {
+ if (what == document.rolechoice.elements[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
</script>
END
my $courseform=&Apache::loncommon::selectcourse_link
- ('roles','dccourse','dcdomain','coursedesc');
- $r->print($cb_jscript.$verify_script);
- my $formaction='/adm/roles';
- $formaction=~s/\/+/\//g;
- my $crs;
- &select_recent_courses($r,$dcdom,$then,$now);
- $r->print('<br /><form name="roles" method="post" action="'.$formaction.'" />');
- $r->print('<h3>'.&mt('Choose a course from domain').': '.$dcdom.'</h3><font size="+1">'.$courseform.'</font><br /><br />'.
- '<input type="hidden" name="chosencourse" value=""/>'.
- 'Course Title: <input type="text" size="20" name="coursedesc" value=""><br />'.
- 'Course ID: <input type="text" size="15" name="dccourse" />'.
- '<input type="hidden" name="dcdomain" value="'.$dcdom.'" />'.
- '<input type="hidden" name="origdom" value="'.$dcdom.'" />'.
- '<input type="hidden" name="selectrole" value="" />'.
- '<br /><br /><input type="button" name="proceed" value="'.&mt('Enter this course').'" onClick="verifyCoursePick()" />'.
- '</form>');
- return;
+ ('rolechoice','dccourse','dcdomain','coursedesc');
+ my $hiddenitems = '<input type="hidden" name="dcdomain" value="'.$dcdom.'" />'.
+ '<input type="hidden" name="origdom" value="'.$dcdom.'" />'.
+ '<input type="hidden" name="dccourse" value="" />'.
+ '<input type="hidden" name="coursedesc" value="" />';
+ return $cb_jscript.$verify_script.$courseform.$hiddenitems;
}
+
sub select_recent_courses {
- my ($r,$dcdom,$then,$now)=@_;
+ my ($r,$roletext)=@_;
my $advanced = $ENV{'user.adv'};
my $tryagain = $ENV{'form.tryagain'};
- my %recent=&Apache::lonnet::dump(&recent_filename('cc_pickby_dc_'.$dcdom));
+ my %recent=&Apache::lonnet::dump(&recent_filename('recent_roles'));
my $numrecent = 0;
- my $roletext = '<h3>'.&mt('Enter a recently visited course').'</h3>'.
- '<form name="rolechoice" action="/adm/roles" method="post">'.
- '<table><tr><th> </th>'.
- '<th>'.&mt('User Role').'</th><th colspan=2>'.&mt('Extent').
- '</th><th>'.&mt('Start').'</th><th>'.&mt('End').'</th><th>'.
- &mt('Remarks and Calendar Announcements').'</th></tr>'."\n".
- '<tr bgcolor="#BBffBB">'.
+ my $roledisplay = '<tr bgcolor="#BBffBB">'.
'<td align="center" colspan="7">'.
- &mt('Domain').' - '.&mt('Recent courses accessed in this domain').
+ &mt('Recent courses accessed by DC').
'</td></tr>'."\n";
foreach my $courseid (sort keys %recent) {
unless ($courseid =~/^error\:/) {
my ($dom,$crs) = split/_/,$courseid;
- if ($dom eq $dcdom) {
- $numrecent ++;
- my $crskey = 'user.role.cc./'.$dom.'/'.$crs;
- my ($where,$trolecode,$role,$tstatus,$tend,$tstart,$tbg,$tfont,$tremark,$inrole,$tpstart,$tpend);
- my $button = 1;
- &role_status($crskey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend);
- if ($tstart) {
- $tpstart=&Apache::lonlocal::locallocaltime($tstart);
- }
- if ($tend) {
- $tpend=&Apache::lonlocal::locallocaltime($tend);
- }
- my $ttype = &mt('Course');
- my $twhere;
- if ($ENV{'course.'.$courseid.'.description'}) {
- $twhere=$ENV{'course.'.$courseid.'.description'};
- }
- my ($tdom,$trest,$tsection)=
- split(/\//,Apache::lonnet::declutter($where));
- if ($ENV{'request.role'} eq $trolecode) {
- $tstatus='selected';
- }
- if ($tstatus eq 'is') {
- $tbg='#77FF77';
- $tfont='#003300';
- } elsif ($tstatus eq 'future') {
- $tbg='#FFFF77';
- $button=0;
- } elsif ($tstatus eq 'will') {
- $tbg='#FFAA77';
- $tremark.=&mt('Active at next login. ');
- } elsif ($tstatus eq 'expired') {
- $tbg='#FF7777';
- $tfont='#330000';
- $button=0;
- } elsif ($tstatus eq 'will_not') {
- $tbg='#AAFF77';
- $tremark.=&mt('Expired after logout. ');
- } elsif ($tstatus eq 'selected') {
- $tbg='#11CC55';
- $tfont='#002200';
- $inrole=1;
- $tremark.=&mt('Currently selected. ');
- }
- my $trole=Apache::lonnet::plaintext($role);
- $roletext.='<tr bgcolor='.$tbg.'>';
- if (!$button) {
- $roletext.=('<td> </td>');
- } elsif ($tstatus eq 'is') {
- $roletext.=('<td><input type=submit value="'.
- &mt('Select').'" name="'.
- $trolecode.'"></td>');
- } elsif ($tryagain) {
- $roletext.=
- '<td><input type=submit value="'.
- &mt('Try Selecting Again').'" name="'.$trolecode.'"></td>';
- } elsif ($advanced) {
- $roletext.=
- '<td><input type=submit value="'.
- &mt('Re-Initialize').'" name="'.$trolecode.'"></td>';
- } else {
- $roletext.='<td> </td>';
- }
- $tremark.=&Apache::lonannounce::showday(time,1,
- &Apache::lonannounce::readcalendar($tdom.'_'.$trest));
-
- $roletext.='<td><font color="'.$tfont.'">'.$trole.
- '</font></td><td><font color="'.$tfont.'">'.$ttype.
- '</font></td><td><font color="'.$tfont.'">'.$twhere.
- '</font></td><td><font color="'.$tfont.'">'.$tpstart.
- '</font></td><td><font color="'.$tfont.'">'.$tpend.
- '</font></td><td><font color="'.$tfont.'">'.$tremark.
- ' </font></td></tr>'."\n";
- }
+ $numrecent ++;
+ my $crskey = 'user.role.cc./'.$dom.'/'.$crs;
+ $roledisplay.=$$roletext{$crskey};
}
}
if ($numrecent > 0) {
- $r->print($roletext.'</table><input type="hidden" '.
- 'name="selectrole" value="1" /></form>'."\n");
+ $r->print("$roledisplay\n");
}
}
+sub allcourses_row {
+ my ($dcdom) = @_;
+ my $ccrole = Apache::lonnet::plaintext('cc');
+ my $selectlink = &courselink($dcdom);
+ my $output = '<tr bgcolor="#77FF77">'.
+ '<td><input type="button" value="'.
+ &mt('Select').'" name="ccpick_'.$dcdom.'/" '.
+ 'onClick="verifyCoursePick(this)">'.
+ '<input type="hidden" name="pick_'.$dcdom.'" value="1"></td>'.
+ '<td><font color="#002200">'.
+ $ccrole.'</font></td><td>'.&mt('Course').'</td>'.
+ '<td><font color="#002200">'.&mt('All courses').':<b> '.
+ $selectlink.'</b>'.
+ '<br />'.&mt('Domain').':'.$dcdom.'</font>'.
+ '<td colspan="4"><font color="#002200">'.
+ &mt('Course Coordinator access to all courses in domain').
+ ': <b>'.$dcdom.'</b></font></td></tr>'."\n";
+ return $output;
+}
+
sub recent_filename {
my $area=shift;
return 'nohist_recent_'.&Apache::lonnet::escape($area);
--raeburn1100273612--