[LON-CAPA-cvs] cvs: loncom /auth lonroles.pm

raeburn lon-capa-cvs@mail.lon-capa.org
Sun, 14 Nov 2004 18:27:08 -0000


This is a MIME encoded message

--raeburn1100456828
Content-Type: text/plain

raeburn		Sun Nov 14 13:27:08 2004 EDT

  Modified files:              
    /loncom/auth	lonroles.pm 
  Log:
  Recent roles display for DC now gathers info for CC roles not viewed this session, but in recently viewed list.  Change in db name for recent roles.  Keys n db now: user.role.cc.\$dom\$course etc.  Ready for generalization to display of recent roles for all users.
  
  
--raeburn1100456828
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20041114132708.txt"

Index: loncom/auth/lonroles.pm
diff -u loncom/auth/lonroles.pm:1.109 loncom/auth/lonroles.pm:1.110
--- loncom/auth/lonroles.pm:1.109	Fri Nov 12 18:29:55 2004
+++ loncom/auth/lonroles.pm	Sun Nov 14 13:27:08 2004
@@ -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 @@
     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 @@
                                 "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 @@
                                 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 @@
                 }
  
                 $roletext.='<tr bgcolor='.$tbg.'>';
-                unless ($nochoose) {
-                    if (!$button) {
-			if ($switchserver) {
-			    $roletext.='<td><a href="/adm/logout?handover='.
-                              $switchserver.'">'.&mt('Switch Server').'</a></td>';
-                        } else {
-                            $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";
+                $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 @@
 	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 build_roletext {
+    my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$ttype,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver) = @_;
+    my $roletext='<tr bgcolor='.$tbg.'>';
+    unless ($nochoose) {
+        if (!$button) {
+            if ($switchserver) {
+                $roletext.='<td><a href="/adm/logout?handover='.
+                $switchserver.'">'.&mt('Switch Server').'</a></td>';
+            } else {
+                $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";
+    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 @@
     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 = '<tr bgcolor="#BBffBB">'.
                    '<td align="center" colspan="7">'.
                    &mt('Recent courses accessed by DC').
                     '</td></tr>'."\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'}.
+                               ' <font size="-2">'.
+                               &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$2,$1,$tfont).
+                               '</font>';
+                    } else {
+                        $twhere=&mt('Currently not available');
+                        $ENV{'course.'.$tcourseid.'.description'}=$twhere;
+                    }
+                    $twhere.="<br />".&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) {

--raeburn1100456828--