--- loncom/interface/lonmenu.pm	2009/11/19 10:26:15	1.305
+++ loncom/interface/lonmenu.pm	2010/01/06 22:40:34	1.309.2.10
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines to control the menu
 #
-# $Id: lonmenu.pm,v 1.305 2009/11/19 10:26:15 bisitz Exp $
+# $Id: lonmenu.pm,v 1.309.2.10 2010/01/06 22:40:34 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -160,6 +160,7 @@ sub prep_menuitem {
 # entries from mydesk.tab
 sub primary_menu {
     my $menu;
+    my $custommenu = &Apache::loncommon::needs_gci_custom();
     # each element of @primary contains following array:
     # (link url, icon path, alt text, link text, condition)
     foreach my $menuitem (@primary_menu) {
@@ -175,6 +176,10 @@ sub primary_menu {
         next if    $$menuitem[4]        eq 'onlypublic'# hide links which are 
                 && $env{'user.name'}    ne 'public'    # only visible to public
                 && $env{'user.domain'}  ne 'public';   # users
+        next if    $$menuitem[4]        eq 'roles'     # hide links which are
+                && $custommenu;                        # not visible when GCI
+        next if    $$menuitem[4]        eq 'courses'   # tabbed interface in use
+                && $custommenu;                        # 
         next if    $$menuitem[4]        eq 'roles'     ##show links depending on
                 && &Apache::loncommon::show_course();  ##term 'Courses' or 
         next if    $$menuitem[4]        eq 'courses'   ##'Roles' wanted
@@ -277,6 +282,45 @@ sub secondary_menu {
     return "<ul id=\"LC_secondary_menu\">$menu</ul>";
 }
 
+sub gci_secondary_menu {
+    my %courses = (
+        'review' => 'gci_9615072b469884921gcil1',
+        'submit' => 'gci_1H96711d710194bfegcil1',
+    );
+    my %linktext = (
+        'review'      => 'Review Questions',
+        'submit'      => 'Submit Questions',
+        'managetest'  => 'Manage Tests',
+    );
+    my %links = (
+                  'managetest' => '/adm/menu',
+                );
+    my $current = 'managetest';
+    if ($env{'form.destinationurl'} eq '/adm/gci_info') {
+        undef($current);
+    }
+    foreach my $key (keys(%courses)) {
+        $links{$key} = "javascript:switchpage('$key');";
+        if ($env{'request.course.id'} eq $courses{$key}) {
+            $links{$key} = '/adm/navmaps';
+            $current = $key;
+            $links{'managetest'} = '/adm/roles?selectrole=1&cm=1&orgurl=%2fadm%2fmenu';
+        }
+    }
+    my @menutabs = ('review','submit','managetest');
+    my $tabs;
+    foreach my $item (@menutabs) {
+        if ($item eq $current) {
+            $tabs .= ' <li id="current"><a href="'.$links{$item}.'">'.
+                     $linktext{$item}.'</a></li>';
+        } else {
+            $tabs .= ' <li><a href="'.$links{$item}.'">'.
+                     $linktext{$item}.'</a></li>';
+        }
+    }
+    return '<div id="gciheader">'.
+           '<ul>'.$tabs.'</ul></div><br />';
+}
 
 #
 # This routine returns a translated hash for the menu items in the top inline menu row
@@ -512,7 +556,7 @@ sub registerurl {
 }
 
 sub innerregister {
-    my ($forcereg, $titletable) = @_;
+    my ($forcereg,$titletable,$bread_crumbs) = @_;
     my $result = '';
     my ($uname,$thisdisfn);
     my $const_space = ($env{'request.state'} eq 'construct');
@@ -753,6 +797,14 @@ s&7&1&del.gif&delete[_1]&resource[_2]&go
 s&7&2&prt.gif&prepare[_1]&printout[_1]&gocstr('/adm/printout','/~$uname/$cleandisfn')&Prepare a printable document
 ENDMENUITEMS
             }
+            if ($noremote) {
+                if (ref($bread_crumbs) eq 'ARRAY') {
+                    &Apache::lonhtmlcommon::clear_breadcrumbs();
+                    foreach my $crumb (@{$bread_crumbs}){
+                        &Apache::lonhtmlcommon::add_breadcrumb($crumb);
+                    }
+                }
+            }
         } elsif ( defined($env{'request.course.id'}) && 
 		 $env{'request.symb'} ne '' ) {
 #
@@ -1324,36 +1376,78 @@ sub openmenu {
 }
 
 sub inlinemenu {
+    my ($context,$switcher) = @_;
     undef(@inlineremote);
     undef(%category_members);
-# calling rawconfig with "1" will evaluate mydesk.tab, even if there is no active remote control
-    &rawconfig(1);
-    my $output='<table id="LC_mainmenu"><tr>';
-    for (my $col=1; $col<=2; $col++) {
-        $output.='<td class="LC_mainmenu_col_fieldset">';
-        for (my $row=1; $row<=8; $row++) {
-            foreach my $cat (keys(%category_members)) {
-               if ($category_positions{$cat} ne "$col,$row") { next; }
-               #$output.='<table><tr><td colspan="4" class="LC_menubuttons_category">'.&mt($category_names{$cat}).'</td></tr>';
-               $output.='<div class="LC_Box">';
-	       $output.='<h4 class="LC_hcell">'.&mt($category_names{$cat}).'</h4>';
-               $output.='<table>';
-               my %active=();
-               foreach my $menu_item (split(/\:/,$category_members{$cat})) {
-                  if ($inlineremote[$menu_item]) {
-                     $active{$menu_item}=1;
-                  }
-               }  
-               foreach my $item (sort(keys(%active))) {
-                  $output.=$inlineremote[$item];
-               }
-               $output.='</table>';
-               $output.='</div>';
+    my $output;
+    if (($context eq 'gcicustom') || ($context eq 'gcistudent')) {
+        $output='<table><tr>'.
+                '<td class="LC_mainmenu_col_fieldset">'.
+                '<div class="LC_Box LC_400Box">'.
+                '<h3 class="LC_hcell">'.&mt('Utilities').'</h3>'.
+                '<table>';
+        if ($context eq 'gcicustom') {
+            my $createtext = &mt('Create Concept Test');
+            if ($switcher) {
+                $createtext = &mt('Create New Test');
             }
-         }
-         $output.="</td>";
+            $output .= '<tr><td align="left"><a href="javascript:switchpage('."'createtest'".');"><img alt="choose role" src="/res/adm/pages/rcrs.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:switchpage('."'createtest'".');"><span class="LC_menubuttons_inline_text">'.$createtext.'</span></a></td></tr>';
+        }
+        if ($switcher) {
+            $output .= '<tr><td align="left"><a href="javascript:courseswitcher('."'icon'".');"><img alt="choose role" src="/res/adm/pages/roles.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="2">'.$switcher.'</td></tr>';
+        }
+        $output .= '<tr><td align="left"><a href="javascript:go('."'/adm/communicate'".');"><img alt="communication" src="/res/adm/pages/com.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:go('."'/adm/communicate'".');"><span class="LC_menubuttons_inline_text">'.&mt('Send/Display Messages').'</span></a></td></tr>'.
+'<tr><td align="left"><a href="javascript:go('."'/adm/preferences'".');"><img alt="user preferences" src="/res/adm/pages/pref.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:go('."'/adm/preferences'".');"><span class="LC_menubuttons_inline_text">'.&mt('Set my user preferences').'</span></a></td></tr>';
+        if ($env{'request.course.id'}) {
+            if (($context eq 'gcicustom') && (&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) {
+                $output.= '</td></tr></table></div></td>'.
+                          '<td class="LC_mainmenu_col_fieldset">'.
+                          '<div class="LC_Box LC_400Box">'.
+                          '<h3 class="LC_hcell">'.&mt('Test Management').'</h3>'.
+                          '<table><tr><td align="left"><a href="javascript:gonav('."'/adm/navmaps'".');"><img alt="course contents" src="/res/adm/pages/nav.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:gonav('."'/adm/navmaps'".');"><span class="LC_menubuttons_inline_text">Concept Test Contents</span></a></td></tr>'."\n".
+                          '<tr><td align="left"><a href="javascript:go('."'/adm/coursedocs'".');"><img alt="assemble test" src="/res/adm/pages/docs.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:go('."'/adm/coursedocs'".');"><span class="LC_menubuttons_inline_text">Assemble Concept Test</span></a></td></tr>'."\n".
+                          '<tr><td align="left"><a href="javascript:go('."'/adm/createuser'".');"><img alt="user privs" src="/res/adm/pages/cprv.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:go('."'/adm/createuser'".');"><span class="LC_menubuttons_inline_text">'.&mt('Manage Enrollment').'</span></a></td></tr>'."\n".
+                         '<tr><td align="left"><a href="javascript:go('."'/adm/whatsnew'".');"><img alt="what is new" src="/res/adm/pages/new.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:go('."'/adm/whatsnew'".');"><span class="LC_menubuttons_inline_text">'.&mt("What's New?").'</span></a></td></tr>'.
+                         '<tr><td align="left"><a href="javascript:go('."'/adm/statistics'".');"><img alt="Test Statistics" src="/res/adm/pages/chrt.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:go('."'/adm/statistics'".');"><span class="LC_menubuttons_inline_text">'.&mt("Concept Test Statistics").'</span></a></td></tr></table></div></td>';
+            } else {
+                my $navtext = &mt('Table of Contents');
+                if ($env{'request.role.domain'} eq 'gcitest') {
+                    $navtext = &mt('Display Test Contents');
+                }
+                $output .= '<tr><td align="left"><a href="javascript:gonav('."'/adm/navmaps'".');"><img alt="course contents" src="/res/adm/pages/nav.png" align="left" class="LC_icon" /></a></td><td class="LC_menubuttons_text" colspan="3"><a class="LC_menubuttons_link" href="javascript:gonav('."'/adm/navmaps'".');"><span class="LC_menubuttons_inline_text">'.$navtext.'</span></a></td></tr></table></div></td>';
+            }
+        }
+        $output.='</tr></table>';
+    } else {
+        # calling rawconfig with "1" will evaluate mydesk.tab, 
+        # even if there is no active remote control
+        &rawconfig(1);
+        $output='<table><tr>';
+        for (my $col=1; $col<=2; $col++) {
+            $output.='<td class="LC_mainmenu_col_fieldset">';
+            for (my $row=1; $row<=8; $row++) {
+                foreach my $cat (keys(%category_members)) {
+                    if ($category_positions{$cat} ne "$col,$row") { next; }
+                    $output.='<div class="LC_Box LC_400Box">';
+	            $output.='<h3 class="LC_hcell">'.&mt($category_names{$cat}).'</h3>';
+                    $output.='<table>';
+                    my %active=();
+                    foreach my $menu_item (split(/\:/,$category_members{$cat})) {
+                        if ($inlineremote[$menu_item]) {
+                            $active{$menu_item}=1;
+                        }
+                    }
+                    foreach my $item (sort(keys(%active))) {
+                        $output.=$inlineremote[$item];
+                    }
+                    $output.='</table>';
+                    $output.='</div>';
+                }
+            }
+            $output.="</td>";
+        }
+        $output.="</tr></table>";
     }
-    $output.="</tr></table>";
     return $output;
 }
 
@@ -1453,15 +1547,31 @@ sub rawconfig {
             }
         } elsif ($pro =~ /^courseenv_(.*)$/) {
             my $key = $1;
-            if (($env{'course.'.$env{'request.course.id'}.'.'.$key}) && 
-                ($crstype ne 'Community')) {
-                $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);
+            if ($crstype ne 'Community') {
+                my $coursepref = $env{'course.'.$env{'request.course.id'}.'.'.$key};
+                if ($key eq 'canuse_pdfforms') {
+                    if ($env{'request.course.id'} && $coursepref eq '') {
+                        my %domdefs = &Apache::lonnet::get_domain_defaults($env{'course.'.$env{'request.course.id'}.'.domain'});
+                        $coursepref = $domdefs{'canuse_pdfforms'};
+                    }
+                }
+                if ($coursepref) { 
+                    $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);
+                }
             }
         } elsif ($pro =~ /^communityenv_(.*)$/) {
             my $key = $1;
-            if (($env{'course.'.$env{'request.course.id'}.'.'.$key}) && 
-                ($crstype eq 'Community')) {
-                $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);
+            if ($crstype eq 'Community') {
+                my $coursepref = $env{'course.'.$env{'request.course.id'}.'.'.$key};
+                if ($key eq 'canuse_pdfforms') {
+                    if ($env{'request.course.id'} && $coursepref eq '') {
+                        my %domdefs = &Apache::lonnet::get_domain_defaults($env{'course.'.$env{'request.course.id'}.'.domain'});
+                        $coursepref = $domdefs{'canuse_pdfforms'};
+                    }
+                }
+                if ($coursepref) { 
+                    $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat);
+                }
             }
         } elsif ($pro =~ /^course_(.*)$/) {
             # Check for permissions inside of a course
@@ -1606,12 +1716,77 @@ function gonav(url) {
 NAVCONTROL
 }
 
+sub dc_popup_js {
+    my %lt = &Apache::lonlocal::texthash(
+                                          more => '(More ...)',
+                                          less => '(Less ...)',
+                                        );
+    return <<"END";
+
+function showCourseID() {
+    document.getElementById('dccid').style.display='block';
+    document.getElementById('dccid').style.textAlign='left';
+    document.getElementById('dccid').style.textFace='normal';
+    document.getElementById('dccidtext').innerHTML ='<a href="javascript:hideCourseID();">$lt{'less'}</a>';
+    return;
+}
+
+function hideCourseID() {
+    document.getElementById('dccid').style.display='none';
+    document.getElementById('dccidtext').innerHTML ='<a href="javascript:showCourseID()">$lt{'more'}</a>';
+    return;
+}
+
+END
+
+}
+
 sub utilityfunctions {
-    my $caller = shift;
+    my ($caller,$custommenu) = @_;
     unless ($env{'environment.remote'} eq 'off' || 
             $caller eq '/adm/menu') { 
             return ''; }
-            
+     
+    my $gcimenujs;
+    if ($custommenu) {
+        my %concepttests = &Apache::loncommon::existing_gcitest_courses('cc');
+        my $managetesturl = '/adm/menu';
+        my $createtesturl = '/adm/requestcourse';
+        if (($env{'request.course.id'}) &&
+            ($env{'course.'.$env{'request.course.id'}.'.domain'} eq 'gci')) {
+            my @items = keys(%concepttests);
+            if (@items== 1) {
+                my $newrole = $items[0];
+                $newrole =~ s{_}{/};
+                $managetesturl = '/adm/roles?selectrole=1&cc./'.$newrole.'=1';
+            } else {
+                $managetesturl = '/adm/roles?selectrole=1&cm=1&orgurl=%2fadm%2fmenu';
+            }
+        }
+        if ($env{'request.course.id'}) {
+            $createtesturl = '/adm/roles?selectrole=1&cm=1&orgurl=%2fadm%2frequestcourse';
+        }
+        $gcimenujs = <<"ENDCUSTOM";
+
+function switchpage(caller) {
+    if (caller == 'review') {
+        document.location.href = '/adm/roles?selectrole=1&st./gci/9615072b469884921gcil1=1';
+    }
+    if (caller == 'submit') {
+        document.location.href = '/adm/roles?selectrole=1&st./gci/1H96711d710194bfegcil1=1';
+    }
+    if (caller == 'createtest') {
+        document.location.href = '$createtesturl';
+    }
+    if (caller == 'managetest') {
+        document.location.href = '$managetesturl';
+    }
+    return;
+}
+
+ENDCUSTOM
+    }
+       
     my $currenturl=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0]));
     if ($currenturl =~ m{^/adm/wrapper/ext/}) {
         if ($env{'request.external.querystring'}) {
@@ -1623,6 +1798,13 @@ sub utilityfunctions {
     my $currentsymb=&Apache::lonenc::check_encrypt($env{'request.symb'});
     my $nav_control=&nav_control_js();
 
+    my $dc_popup_cid;
+    if ($env{'user.adv'} && exists($env{'user.role.dc./'.
+                        $env{'course.'.$env{'request.course.id'}.
+                                 '.domain'}.'/'})) {
+        $dc_popup_cid = &dc_popup_js();
+    }
+
     my $start_page_annotate = 
         &Apache::loncommon::start_page('Annotator',undef,
 				       {'only_body' => 1,
@@ -1650,6 +1832,9 @@ return (<<ENDUTILITY)
     var currentSymb="$currentsymb";
 
 $nav_control
+$dc_popup_cid
+
+$gcimenujs
 
 function go(url) {
    if (url!='' && url!= null) {
@@ -1841,7 +2026,9 @@ sub hidden_button_check {
         return;
     }
     if ($env{'request.role.adv'}) {
-        return;
+        unless (&Apache::loncommon::needs_gci_custom()) {
+            return;
+        }
     }
     my $buttonshide = &Apache::lonnet::EXT('resource.0.buttonshide');
     return $buttonshide;