[LON-CAPA-cvs] cvs: loncom(GCI_3) /interface lonmainmenu.pm

raeburn raeburn@source.lon-capa.org
Mon, 07 Dec 2009 18:37:11 -0000


raeburn		Mon Dec  7 18:37:11 2009 EDT

  Modified files:              (Branch: GCI_3)
    /loncom/interface	lonmainmenu.pm 
  Log:
  - Customizations for GCI_3.
    - Main Menu for GCI users has select box to switch to/between Concept Tests
      if user is a CC for one or more tests.
  
  
Index: loncom/interface/lonmainmenu.pm
diff -u loncom/interface/lonmainmenu.pm:1.8 loncom/interface/lonmainmenu.pm:1.8.4.1
--- loncom/interface/lonmainmenu.pm:1.8	Mon Jul 13 08:24:21 2009
+++ loncom/interface/lonmainmenu.pm	Mon Dec  7 18:37:11 2009
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # displays the main menu
 #
-# $Id: lonmainmenu.pm,v 1.8 2009/07/13 08:24:21 www Exp $
+# $Id: lonmainmenu.pm,v 1.8.4.1 2009/12/07 18:37:11 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -43,6 +43,8 @@
 use Apache::loncommon();
 use Apache::lonnet;
 use Apache::lonmenu();
+use Apache::lonlocal;
+use LONCAPA qw(:DEFAULT :match);
 
 sub handler {
     my $r = shift;
@@ -56,7 +58,8 @@
 	$form=&Apache::lonmenu::serverform();
     }
 
-    my $script_tag;
+    my $custommenu = &Apache::loncommon::needs_gci_custom();
+    my ($script_tag,$switcher);
     if ($env{'environment.remote'} ne 'off') {
         my $utility=&Apache::lonmenu::utilityfunctions('/adm/menu');
         $script_tag=(<<ENDSCRIPT);
@@ -64,6 +67,24 @@
 $utility
 </script>
 ENDSCRIPT
+    } elsif ($custommenu) {
+        my $switcher_js;
+        my %courses = &Apache::loncommon::existing_gcitest_courses();
+        my $numcourses = keys(%courses);
+        if ($numcourses > 0) {
+            $switcher = &gcitest_switcher(%courses);
+            my $current;
+            if ($env{'request.course.id'}) {
+                $current = 'cc./'.$env{'course.'.$env{'request.course.id'}.'.domain'}.
+                           '/'.$env{'course.'.$env{'request.course.id'}.'.num'};
+            }
+            $switcher_js = &gcitest_switcher_js($current,$numcourses);
+            $script_tag= <<"ENDSCRIPT";
+<script type="text/javascript">
+$switcher_js
+</script>
+ENDSCRIPT
+        }
     }
 # ---- Print the screen, pretend to be in text mode to generate text-based menu
 # temporarily set interface to "faketextual" and remote to "off", which renders
@@ -74,11 +95,55 @@
     $r->print(&Apache::loncommon::start_page( 'Main Menu',
                                               $script_tag,
                                               {'bread_crumbs' => 1}));
-    $r->print(&Apache::lonmenu::inlinemenu().$form);
+    if ($custommenu) {
+        $r->print(&Apache::lonmenu::inlinemenu('gcicustom',$switcher).$form);
+    } else {
+        $r->print(&Apache::lonmenu::inlinemenu().$form);
+    }
     $r->print(&Apache::loncommon::end_page());
     return OK;
 }
 
+sub gcitest_switcher {
+    my (%courses) = @_;
+    my $output;
+    my %Sortby;
+    foreach my $course (sort(keys(%courses))) {
+        next unless (ref($courses{$course}) eq 'HASH');
+        my $clean_title = $courses{$course}{'description'};
+        $clean_title =~ s/\W+//g;
+        if ($clean_title eq '') {
+            $clean_title = $courseinfo{$course}{'description'};
+        }
+        push(@{$Sortby{$clean_title}},$course);
+    }
+    my @sorted_courses = sort { lc($a) cmp lc($b) } (keys(%Sortby));
+    my $default;
+    if (@sorted_courses > 1) {
+        if (($env{'request.course.id'}) && ($courses{$env{'request.course.id'}})) {
+            $default = &mt('Switch concept test ...');
+        } else {
+            $default = &mt('Select a concept test ...');
+        }
+    } else {
+        unless (($env{'request.course.id'}) && ($courses{$env{'request.course.id'}})) {
+            $default = &mt('Select concept test ...');
+        }
+    }
+    if ($default) {
+        $output = '<form name="pickrole" action="/adm/roles" method="post">'.
+                  '<select name="newrole" method="post" onchange="javascript:courseswitcher();">'.
+                  '<option value="" selected="selected">'.$default.'</option>';
+        foreach my $item (@sorted_courses) {
+            foreach my $course (@{$Sortby{$item}}) {
+                my ($cdom,$cnum) = split('_',$course);
+                $output .= '<option value="cc./'.$cdom.'/'.$cnum.'">'.$item.'</option>';
+            }
+        }
+        $output .= '</select><input type="hidden" name="selectrole" value="" /></form>';
+    }
+    return $output;
+}
 
 1;
 __END__