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

raeburn raeburn@source.lon-capa.org
Mon, 04 Oct 2010 18:01:32 -0000


This is a MIME encoded message

--raeburn1286215292
Content-Type: text/plain

raeburn		Mon Oct  4 18:01:32 2010 EDT

  Modified files:              (Branch: GCI_3)
    /loncom/interface	loncommon.pm 
  Log:
  - Customization for GCI_3
    - Backport 1.933
    - &concept_test_manager() added to provide inline tertiary menu for Coordinator
      role in Concept Tests.
    - Additional styles (for <dl>, <dt>, <dd> for "Menu" page.
    - LC_page_header style to provide white background for primary menu where
      resource defines black background for .body.
    - #LC_breadcrumbs has text-align: left; to flush breadcrumbs left where 
      resource defines text-align: center in .body.
    - gctest_switcher() and gcitest_switcher_js() moved from lonmainmenu.pm to loncommon.pm
  
  
--raeburn1286215292
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20101004180132.txt"

Index: loncom/interface/loncommon.pm
diff -u loncom/interface/loncommon.pm:1.925.2.13 loncom/interface/loncommon.pm:1.925.2.14
--- loncom/interface/loncommon.pm:1.925.2.13	Sun Sep 19 18:50:48 2010
+++ loncom/interface/loncommon.pm	Mon Oct  4 18:01:31 2010
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.925.2.13 2010/09/19 18:50:48 raeburn Exp $
+# $Id: loncommon.pm,v 1.925.2.14 2010/10/04 18:01:31 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -4559,8 +4559,7 @@
 
         my $role_selector;
         if (($custommenu) && ($env{'request.course.id'}) && 
-            ($env{'course.'.$env{'request.course.id'}.'.domain'} eq 'gcitest') &&
-            ($env{'request.role'} !~ m{^st\./gcitest/$match_courseid})) {
+            ($env{'course.'.$env{'request.course.id'}.'.domain'} eq 'gcitest')) {
             $role_selector = &Apache::lonmenu::roles_selector(
                         $env{'course.' . $env{'request.course.id'} . '.domain'},
                         $env{'course.' . $env{'request.course.id'} . '.num'}  );
@@ -4568,6 +4567,56 @@
                 $role_selector = '<br />'.$role_selector;
             }
         }
+        my $cid = $env{'request.course.id'};
+        my %gcicourses = (
+                           gci_9615072b469884921gcil1 => 'review',
+                           gci_1H96711d710194bfegcil1 => 'submit',
+                           gci_5422913620b814c90gcil1 => 'tutorial',
+                         );
+        if (($custommenu && $cid && !$gcicourses{$cid}) || ($env{'user.domain'} eq 'gcitest')) {
+            my $role = 'st';
+            if ($custommenu) {
+                $role = 'cc';
+            }
+            my ($switcher_js,$switcher,$formname);
+            $formname = 'pickrole';
+            my %courses = &existing_gcitest_courses($role);
+            my $numcourses = keys(%courses);
+            my $reqdcount = 0;
+            if ($cid) {
+                if ($courses{$cid}) {
+                    $reqdcount = 1; 
+                }
+            }
+            if ($numcourses > $reqdcount) {
+                $switcher = &gcitest_switcher($role,$formname,%courses);
+                my $current;
+                if ($cid) {
+                    $current = $role.'./'.$env{'course.'.$cid.'.domain'}.
+                               '/'.$env{'course.'.$cid.'.num'};
+                }
+                $switcher_js = &Apache::loncommon::gcitest_switcher_js($current,$numcourses,$formname);
+                if ($switcher_js) {  
+                    $switcher_js= <<"ENDSCRIPT";
+<script type="text/javascript">
+// <![CDATA[
+
+$switcher_js
+
+// ]]>
+</script>
+ENDSCRIPT
+                }
+            }
+            if ($switcher) {
+                $switcher = $switcher_js.$switcher;
+                if ($role_selector) {
+                    $role_selector .= '&nbsp;&nbsp;&nbsp;'.$switcher;
+                } else {
+                    $role_selector .= '<br />'.$switcher;
+                }
+            }
+        }
 
         if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) {
              if ($dc_info) {
@@ -4578,6 +4627,9 @@
             return $bodytag;
         }
 
+        if ($cid && $gcicourses{$cid} eq 'tutorial') {
+            $bodytag .= '<div class="LC_page_header">';
+        } 
         $bodytag .= qq|<div id="LC_nav_bar">$name $role $role_selector</div>|;
 
         $bodytag .= Apache::lonhtmlcommon::scripttag(
@@ -4589,6 +4641,9 @@
             $dc_info = &dc_courseid_toggle($dc_info);
         }
         $bodytag .= qq|<div id="LC_realm">$realm $dc_info</div>|;
+        if ($cid && $gcicourses{$cid} eq 'tutorial') {
+            $bodytag .= '</div>';
+        }
 
         #don't show menus for public users
         if($env{'user.name'} ne 'public' && $env{'user.domain'} ne 'public'){
@@ -4605,6 +4660,17 @@
                                 $args->{'bread_crumbs'});
             } elsif ($forcereg) { 
                 $bodytag .= &Apache::lonmenu::innerregister($forcereg);
+            } elsif ($custommenu && $env{'request.course.id'} && 
+                     &Apache::lonnet::allowed('mdc', $env{'request.course.id'})) {
+                if ($env{'request.noversionuri'} eq '/adm/navmaps') {
+                    my @advtools = &concept_test_manager();
+                    &Apache::lonhtmlcommon::add_breadcrumb_tool(
+                                      'advtools',@advtools);
+                    my $advlinks;
+                    my $legendtext = '<a class="LC_menubuttons_link" href="/adm/menu">'.&mt('Management').'</a>';
+                    &Apache::lonhtmlcommon::render_advtools(\$advlinks,$legendtext);
+                    $bodytag .= $advlinks;
+                }
             }
         }else{
             # this is to seperate menu from content when there's no secondary
@@ -4613,8 +4679,6 @@
             $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end'); 
         }
 
-        #SD testing
-        #$bodytag .= Apache::lonmenu::menubuttons($forcereg);
         return $bodytag;
     }
 
@@ -4652,6 +4716,52 @@
 ENDBODY
 }
 
+sub concept_test_manager {
+    my @advtools;
+    my  %items = (
+                   docs => { 
+                              desc    => 'Edit Test',
+                              action  => "go('/adm/coursedocs')",
+                              tooltip => 'Assemble or modify Concept Test'
+                           },
+                   cprv => {
+                              desc => 'Enrollment/Activity',
+                              action => "go('/adm/createuser')",
+                              tooltip => 'Enrollment and student activity',
+                           },
+                   new => { 
+                              desc   => "What's New?",
+                              action => "go('/adm/whatsnew')",
+                              tooltip => 'Recent events/action items in Concept Test' ,
+                           },
+                   prnt => {
+                              desc => 'Print Test',
+                              action => "go('/adm/printout');",
+                              tooltip => 'Prepare printable Concept Test',
+                           },
+                   chrt => { 
+                              desc   => 'Test Statistics',
+                              action => "go('/adm/statistics');",
+                              tooltip => 'Concept Test Statistics',
+                           },
+                   rcrs => {
+                              desc   => 'Create New Test',
+                              action  => "switchpage('createtest');",
+                              tooltip => 'Create new Concept Test',
+                           },
+                 );
+    my @ordered = ('docs','cprv','new','prnt','chrt','rcrs');
+    foreach my $item (@ordered) {
+         push(@advtools,
+                  '<a title="'.$items{$item}{tooltip}.'" class="LC_menubuttons_link" href="javascript:'.
+                  $items{$item}{action}.';">'.
+                  '<img src="'.'/res/adm/pages/'.$item.'22.png" alt="'.$items{$item}{tooltip}.
+                  '" border="0" class="LC_icon" />'.
+                  '<span class="LC_menubuttons_inline_text">'.$items{$item}{desc}.'</span></a>');
+    }
+    return @advtools;
+}
+
 sub dc_courseid_toggle {
     my ($dc_info) = @_;
     return ' <span id="dccidtext" class="LC_cusr_subheading">'.
@@ -4954,6 +5064,47 @@
   margin: 0;
 }
 
+ul.LC_breadcrumb_tools_outerlist {
+    margin: 0;
+    padding: 0;
+    position: relative;
+    list-style: none;
+}
+ul.LC_breadcrumb_tools_outerlist li {
+    display: inline;
+}
+
+.LC_breadcrumb_tools_navigation {
+    padding: 0;
+    margin: 0;
+    float: left;
+}
+.LC_breadcrumb_tools_tools {
+    padding: 0;
+    margin: 0;
+    float: right;
+}
+
+div.LC_GCI_Menu {
+    width:900px;
+}
+
+div.LC_GCI_Menu:after {
+    content:'';
+    display:block;
+    clear:both;
+}
+
+div.LC_GCI_Menu_left {
+    float:left;
+    width:400px;
+}
+
+div.LC_GCI_Menu_right {
+    float:left;
+    width:400px;;
+}
+
 dl.LC_GCI_Menu {
     width:300px;
     float:left;
@@ -4966,6 +5117,10 @@
     margin-bottom:0.7em;
 }
 
+dl.LC_GCI_Menu dt a {
+    color: $font;
+}
+
 dl.LC_GCI_Menu dd {
     font-size:0.8em;
     margin:0 0 2em 0;
@@ -4974,47 +5129,6 @@
     background:none no-repeat left top;
 }
 
-/* #SD START (work in progress)*/
-
-ul.LC_bct {
-    margin: 0;
-    padding: 0;
-}
-ul.LC_bct ol {
-    display: inline;
-}
-ul.LC_bct ul {
-    display: inline;
-    padding: 0;
-}
-ul.LC_bct li {
-    list-style-type: none;
-    display: inline;
-}
-
-
-ul.LC_breadcrumb_tools {
-}
-
-li.LC_breadcrumb_tools {
-}
-li.LC_breadcrumb_tools img{
-    vertical-align: middle;
-}
-
-.LC_breadcrumb_tools_A {
-    margin: 0 0 0 1em;
-}
-.LC_breadcrumb_tools_B {
-    float: right;
-    margin-top: 0.4em;
-}
-.LC_breadcrumb_tools_C {
-    margin: 0 1em 0 0;
-    float: right;
-}
-/* #SD END */
-
 table#LC_title_bar td {
   background: $tabbg;
 }
@@ -5025,7 +5139,7 @@
 
 .LC_breadcrumbs_component {
   float: right;
-  margin: 0 1em;
+  margin: 0.25em 1em;
 }
 .LC_breadcrumbs_component img {
   vertical-align: middle;
@@ -5044,11 +5158,10 @@
   background: $sidebg;
   border-bottom: 1px solid $lg_border_color;
   line-height: 2.5em;
-     /* SD working here 
-     height: 2.5em;
-     overflow: hidden; */
+  overflow: hidden;
   margin: 0;
   padding: 0;
+  text-align: left;
 }
 
 /* Preliminary fix to hide breadcrumbs inside remote control window */
@@ -5060,7 +5173,7 @@
   clear:both;
   background: #F8F8F8; /* $sidebg; */
   border: 1px solid $sidebg;
-  margin: 0 0 10px 0;      
+  margin: 0 0 0 0;      
 }
 
 .LC_fontsize_medium {
@@ -6018,6 +6131,11 @@
   padding: 0 5px 0 5px;
 }
 
+div.LC_page_header {
+  background-color: $pgbg_or_bgcolor;
+  margin: 0 0 1.0em 0;
+}
+
 #LC_nav_bar {
   float: left;
   margin: 0.2em 0 0 0;
@@ -6193,18 +6311,15 @@
 ol#LC_PathBreadcrumbs {
   padding-left: 10px;
   margin: 0;
-  list-style-position: inside;
-    /* SD working here 
-    white-space: nowrap; */
+  margin: 0;
+  height: 2.5em;  /* equal to #LC_breadcrumbs line-height */
 }
 
 ol#LC_MenuBreadcrumbs li,
 ol#LC_PathBreadcrumbs li,
 ul.LC_CourseBreadcrumbs li {
   display: inline;
-  white-space: nowrap;
-    /* SD working here  
-    white-space: normal; */ 
+  white-space: normal;
 }
 
 ol#LC_MenuBreadcrumbs li a,
@@ -6213,6 +6328,14 @@
   font-size:90%;
 }
 
+ol#LC_MenuBreadcrumbs h1 {
+  display: inline;
+  font-size: 90%;
+  line-height: 2.5em;
+  margin: 0;
+  padding: 0;
+}
+
 ol#LC_PathBreadcrumbs li a {
   text-decoration:none;
   font-size:100%;
@@ -6457,6 +6580,11 @@
     padding: 0.5em 1em 0.5em 0;
 }
 
+ul.LC_funclist > li:first-child {
+    font-weight:bold;
+    margin-left:0.8em;
+}
+
 ul.LC_funclist + ul.LC_funclist {
     /* 
        left border as a seperator if we have more than
@@ -6483,10 +6611,11 @@
   background:#DAE0D2 url("/gcimenu_bg.gif") repeat-x bottom;
   font-size:93%;
   line-height:normal;
+  margin: 0.5em 0 0.5em 0;
 }
 #gciheader ul {
   margin:0;
-  padding:10px 10px 0;
+  padding:10px 5px 0;
   list-style:none;
 }
 #gciheader li {
@@ -6801,8 +6930,8 @@
 		#if bread_crumbs_component exists show it as headline else show only the breadcrumbs
 		if(exists($args->{'bread_crumbs_component'})){
 			$result .= &Apache::lonhtmlcommon::breadcrumbs($args->{'bread_crumbs_component'});
-		}else{
-			$result .= &Apache::lonhtmlcommon::breadcrumbs();
+		} else {
+                	$result .= &Apache::lonhtmlcommon::breadcrumbs(); 
 		}
     }
     return $result;
@@ -10909,6 +11038,81 @@
     return %courses;
 }
 
+sub gcitest_switcher {
+    my ($role,$formname,%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 = $courses{$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="'.$formname.'" action="/adm/roles" method="post">'.
+                  '<select name="newrole" 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="'.$role.'./'.$cdom.'/'.$cnum.'">'.$courses{$course}{'description'}.'</option>';
+            }
+        }
+        $output .= '</select><input type="hidden" name="selectrole" value="" /></form>';
+    }
+    return $output;
+}
+
+sub gcitest_switcher_js {
+    my ($current,$numcourses,$formname) = @_;
+    my $output = <<"ENDJS";
+
+function courseswitcher(caller) {
+    var numcourses = $numcourses;
+    var current = '$current';
+    var choice = document.$formname.newrole.options[document.$formname.newrole.selectedIndex].value;
+    if (choice == '') {
+        if (caller == 'icon') {
+            alert('No Concept Test selected');
+        }
+        document.$formname.selectrole.value = '';
+        return;
+    }
+    if (choice == current) {
+        if ((caller != 'icon') && (numcourses > 1)) {
+            alert('You have selected the current course.\\nPlease select a different Concept Test course');
+        }
+        document.$formname.newrole.selectedIndex = 0;
+        document.$formname.selectrole.value = '';
+        return;
+    }
+    document.$formname.selectrole.value = '1';
+    document.$formname.submit();
+    return;
+}
+
+ENDJS
+    return $output;
+}
+
+
+
 =pod
 
 =back

--raeburn1286215292--