[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>&nbsp;</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>&nbsp;</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>&nbsp;</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.
-                      '&nbsp;</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>&nbsp;'.
+              $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--