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

raeburn raeburn@source.lon-capa.org
Wed, 23 Sep 2009 19:42:20 -0000


This is a MIME encoded message

--raeburn1253734940
Content-Type: text/plain

raeburn		Wed Sep 23 19:42:20 2009 EDT

  Modified files:              (Branch: GCI_1)
    /loncom/auth	lonroles.pm 
  Log:
  - Customization for GCI.
  - Automatically select role if user only has one active role.
  - Backport 1.216 and part of 1.224
  
  
--raeburn1253734940
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20090923194220.txt"

Index: loncom/auth/lonroles.pm
diff -u loncom/auth/lonroles.pm:1.209.4.1 loncom/auth/lonroles.pm:1.209.4.2
--- loncom/auth/lonroles.pm:1.209.4.1	Wed Sep 23 16:55:53 2009
+++ loncom/auth/lonroles.pm	Wed Sep 23 19:42:20 2009
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # User Roles Screen
 #
-# $Id: lonroles.pm,v 1.209.4.1 2009/09/23 16:55:53 raeburn Exp $
+# $Id: lonroles.pm,v 1.209.4.2 2009/09/23 19:42:20 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -549,6 +549,11 @@
     my %futureroles;
     my %roles_nextlogin;
     my %timezones;
+    my $numcourses;
+    if ($env{'user.adv'}) {
+       my %courses = &Apache::lonnet::courseiddump($env{'user.domain'},'.','.','.','.','.',undef,undef,'Course');
+       $numcourses = keys(%courses);
+    }
     foreach $envkey (sort keys %env) {
         my $button = 1;
         my $switchserver='';
@@ -714,9 +719,12 @@
         $r->print(' /></label><input type="submit" value="'.&mt('Display').'" /></span>');
     } else {
         if ($countactive > 0) {
-            my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description');
-            my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&'); 
-            $r->print('<p>'.&mt('[_1]Visit the [_2]Course Catalog[_3] to view all [_4] LON-CAPA courses.','<b>','<a href="/adm/coursecatalog?showdom='.$esc_dom.'">','</a></b>',$domdesc).'<br />'.&mt('If a course is [_1]not[_2] in your list of current courses below, you may be able to enroll if self-enrollment is permitted.','<b>','</b>').'</p>');
+            my $queuetotal = &queued_selfenrollment($r);
+            if (($numcourses-$queuetotal) > 1) {
+                my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description');
+                my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&'); 
+                $r->print('<p>'.&mt('[_1]Visit the [_2]Course Catalog[_3] to view all [_4] GCI WebCenter courses.','<b>','<a href="/adm/coursecatalog?showdom='.$esc_dom.'">','</a></b>',$domdesc).'<br />'.&mt('If a course is [_1]not[_2] in your list of current courses below, you may be able to enroll if self-enrollment is permitted.','<b>','</b>').'</p>');
+            }
         }
     }
 
@@ -727,7 +735,7 @@
 	} else {
 	    $r->print('<h2>'.&mt('Currently no active roles or courses').'</h2>');
 	}
-        &findcourse_advice($r);
+        &findcourse_advice($r,$numcourses);
 	$r->print('</form>');
         if ($countfuture) {
             $r->print(&mt('The following [quant,_1,role,roles] will become active in the future:',$countfuture));
@@ -752,6 +760,27 @@
         }
         $r->print(&Apache::loncommon::end_page());
 	return OK;
+    } elsif ($countactive==1) { # Is there only one choice?
+        my $needs_switchserver;
+        if ($env{'user.author'}) {
+            $needs_switchserver = &check_needs_switchserver($possiblerole);
+        }
+        if ((!$needs_switchserver) && ($env{'request.role'} eq 'cm')) {
+	    $r->print('<h3>'.&mt('Please stand by.').'</h3>'.
+	        '<input type="hidden" name="'.$possiblerole.'" value="1" />'.
+            '<noscript><br /><input type="submit" name="submit" value="'.&mt('Continue').'" /></noscript>');
+	    $r->print("</form>\n");
+	    $r->rflush();
+	    $r->print('<script type="text/javascript">document.forms.rolechoice.submit();</script>');
+	    $r->print(&Apache::loncommon::end_page());
+	    return OK;
+        }
+        if ($needs_switchserver) {
+            $r->print("<h2>".&mt('Server Switch Required')."</h2>\n".
+                      &mt('Construction Space access is only available from '.
+                          'the home server of the corresponding Author.').'<br />'.
+                      &mt("Click the 'Switch Server' link to go there.").'<br />');   
+        }
     }
 # ----------------------------------------------------------------------- Table
     unless ((!&Apache::lonmenu::show_course()) || ($nochoose) || ($countactive==1)) {
@@ -826,10 +855,14 @@
 	$r->print('<p><small><i>'
                  .&mt('This is LON-CAPA [_1]',$r->dir_config('lonVersion'))
 		 .'</i><br />'
-		 .'<a href="/adm/logout">'.&mt('Logout').'</a>&nbsp;&nbsp;'
-                 .'<a href="/adm/coursecatalog?showdom='.$esc_dom.'">'
-                 .&mt('Course Catalog')
-                 .'</small></p>');
+		 .'<a href="/adm/logout">'.&mt('Logout').'</a>');
+        if ($numcourses>1) {
+            $r->print('&nbsp;&nbsp;'.
+                      '<a href="/adm/coursecatalog?showdom='.$esc_dom.'">'.
+                      &mt('Course Catalog').
+                      '</small>');
+        }
+        $r->print('</p>');
     }
     $r->print(&Apache::loncommon::end_page());
     return OK;
@@ -947,7 +980,7 @@
 }
 
 sub findcourse_advice {
-    my ($r) = @_;
+    my ($r,$numcourses) = @_;
     my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description');
     my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&');
     if (&Apache::lonnet::auto_run(undef,$env{'user.domain'})) {
@@ -962,11 +995,59 @@
     } else {
         $r->print(&mt('If you were expecting to see an active role listed for a particular course, that course may not have been created yet.').'<br />');
     }
-    $r->print('<p>'.&mt('The [_1]Course Catalog[_2] provides information about all [_3] classes for which LON-CAPA courses have been created.','<a href="/adm/coursecatalog?showdom='.$esc_dom.'">','</a>',$domdesc).'<br />');
-    $r->print(&mt('You can search the course catalog for courses which permit self-enrollment, if you would like to enroll in a course.').'</p>');
+    my $queuetotal = &queued_selfenrollment($r);
+    if (($numcourses - $queuetotal) > 0) {
+        $r->print('<p>'.&mt('The [_1]Course Catalog[_2] provides information about all [_3] classes for which LON-CAPA courses have been created.','<a href="/adm/coursecatalog?showdom='.$esc_dom.'">','</a>',$domdesc).'<br />');
+        $r->print(&mt('You can search the course catalog for courses which permit self-enrollment, if you would like to enroll in a course.').'</p>');
+    }
     return;
 }
 
+sub queued_selfenrollment {
+    my ($r) = @_;
+    my %selfenrollrequests = &Apache::lonnet::dump('selfenrollrequests');
+    my %reqs_by_date;
+    my $queuetotal = 0;
+    foreach my $item (keys(%selfenrollrequests)) {
+        if (ref($selfenrollrequests{$item}) eq 'HASH') {
+            if ($selfenrollrequests{$item}{'status'} eq 'request') {
+                if ($selfenrollrequests{$item}{'timestamp'}) {
+                    push(@{$reqs_by_date{$selfenrollrequests{$item}{'timestamp'}}},$item);
+                }
+            }
+        }
+    }
+    if (keys(%reqs_by_date)) {
+        my $rolename = &Apache::lonnet::plaintext('st');
+        $r->print('<b>'.&mt('Enrollment requests pending Course Coordinator approval').'</b><br />'.
+                  &Apache::loncommon::start_data_table().
+                  &Apache::loncommon::start_data_table_header_row().
+                  '<th>'.&mt('Date requested').'</th><th>'.&mt('Course title').'</th>'.
+                  '<th>'.&mt('User role').'</th><th>'.&mt('Section').'</th>'.
+                 &Apache::loncommon::end_data_table_header_row());
+        my @sorted = sort { $a <=> $b } (keys(%reqs_by_date));
+        foreach my $item (@sorted) {
+            if (ref($reqs_by_date{$item}) eq 'ARRAY') {
+                foreach my $crs (@{$reqs_by_date{$item}}) {
+                    my %courseinfo = &Apache::lonnet::coursedescription($crs);
+                    my $usec = $selfenrollrequests{$crs}{'section'};
+                    if ($usec eq '') {
+                        $usec = &mt('No section');
+                    }
+                    $r->print(&Apache::loncommon::start_data_table_row().
+                             '<td>'.&Apache::lonlocal::locallocaltime($item).'</td>'.
+                             '<td>'.$courseinfo{'description'}.'</td>'.
+                             '<td>'.$rolename.'</td><td>'.$usec.'</td>'.
+                             &Apache::loncommon::end_data_table_row());
+                    $queuetotal ++;
+                }
+            }
+        }
+        $r->print(&Apache::loncommon::end_data_table());
+    }
+    return $queuetotal;
+}
+
 sub privileges_info {
     my ($which) = @_;
     my $output;
@@ -1076,7 +1157,7 @@
         } elsif ($advanced) {
             $roletext.=
                 '<td'.$rowspan.'><input name="'.$buttonname.'" type="button" value="'.
-                &mt('Re-Initialize').'" onClick="javascript:enterrole(this.form,\''.
+                &mt('Re-Select').'" onClick="javascript:enterrole(this.form,\''.
                         $trolecode."','".$buttonname.'\');" /></td>';
         } elsif ($reinit) {
             $roletext.= 
@@ -1086,7 +1167,7 @@
         } else {
             $roletext.=
                 '<td'.$rowspan.'><input name="'.$buttonname.'" type="button" value="'.
-                &mt('Re-Initialize').'" onClick="javascript:enterrole(this.form,\''.
+                &mt('Re-Select').'" onClick="javascript:enterrole(this.form,\''.
                         $trolecode."','".$buttonname.'\');" /></td>';
         }
     }

--raeburn1253734940--