--- loncom/interface/loncommon.pm 2010/09/19 18:50:48 1.925.2.13
+++ loncom/interface/loncommon.pm 2010/11/09 00:08:06 1.925.2.17
@@ -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.17 2010/11/09 00:08:06 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -4491,16 +4491,20 @@ sub bodytag {
# realm
if ($env{'request.course.id'}) {
if ($env{'request.role'} !~ /^cr/) {
- if (($custommenu) && ($role eq 'cm')) {
+ if (($custommenu) && (($role eq 'cm') || ($env{'form.context'} eq 'requestcrs'))) {
undef($role);
} else {
$role = &Apache::lonnet::plaintext($role,&course_type());
}
}
- if ($env{'request.course.sec'}) {
+ if (defined($role) && $env{'request.course.sec'}) {
$role .= (' 'x2).'- '.&mt('section:').' '.$env{'request.course.sec'};
- }
- $realm = $env{'course.'.$env{'request.course.id'}.'.description'};
+ }
+ if ($env{'form.context'} eq 'requestcrs') {
+ undef($realm);
+ } else {
+ $realm = $env{'course.'.$env{'request.course.id'}.'.description'};
+ }
} else {
if (($custommenu) && ($role eq 'cm')) {
undef($role);
@@ -4558,9 +4562,9 @@ sub bodytag {
# }
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})) {
+ if (($custommenu) && !($env{'form.context'} eq 'requestcrs') &&
+ ($env{'request.course.id'}) &&
+ ($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 +4572,58 @@ sub bodytag {
$role_selector = '
'.$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{'form.context'} eq 'requestcrs') ||
+ ($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";
+
+ENDSCRIPT
+ }
+ }
+ if ($switcher) {
+ $switcher = $switcher_js.$switcher;
+ if ($role_selector) {
+ $role_selector .= ' '.$switcher;
+ } else {
+ $role_selector .= '
'.$switcher;
+ }
+ }
+ }
if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) {
if ($dc_info) {
@@ -4577,7 +4633,15 @@ sub bodytag {
$realm $dc_info|;
return $bodytag;
}
+ if ($env{'request.noversionuri'} eq '/adm/navmaps' &&
+ $env{'environment.remotenavmap'} eq 'on') {
+ return $bodytag;
+ }
+ if ($cid && $gcicourses{$cid} eq 'tutorial') {
+ $bodytag .= '
';
+ }
#don't show menus for public users
if($env{'user.name'} ne 'public' && $env{'user.domain'} ne 'public'){
if (($custommenu) &&
($env{'request.role'} !~ m{^st\./gcitest/$match_courseid})) {
$bodytag .= &Apache::lonmenu::gci_secondary_menu();
- } else {
+ } elsif ($env{'request.role'} ne 'cm' || &check_for_gci_dc()) {
$bodytag .= Apache::lonmenu::secondary_menu();
}
$bodytag .= Apache::lonmenu::serverform();
@@ -4605,6 +4672,28 @@ sub bodytag {
$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') &&
+ ($env{'request.noversionuri'} ne 'on')) ||
+ (($env{'request.noversionuri'} eq '/adm/coursedocs') &&
+ (!($env{'form.context'} eq 'requestcrs'))) ||
+ (($env{'request.noversionuri'} eq '/adm/createuser') &&
+ (!($env{'form.context'} eq 'requestcrs'))) ||
+ ($env{'request.noversionuri'} eq '/adm/whatsnew') ||
+ ($env{'request.noversionuri'} eq '/cgi-bin/printout.pl') ||
+ ($env{'request.noversionuri'} eq '/adm/printout') ||
+ ($env{'request.noversionuri'} eq '/adm/statistics')) {
+
+ my @advtools = &concept_test_manager();
+ &Apache::lonhtmlcommon::clear_breadcrumbs();
+ &Apache::lonhtmlcommon::add_breadcrumb_tool(
+ 'advtools',@advtools);
+ my $advlinks;
+ my $legendtext = '';
+ &Apache::lonhtmlcommon::render_advtools(\$advlinks,$legendtext);
+ $bodytag .= $advlinks;
+ }
}
}else{
# this is to seperate menu from content when there's no secondary
@@ -4613,8 +4702,6 @@ sub bodytag {
$bodytag .= Apache::lonhtmlcommon::scripttag('', 'end');
}
- #SD testing
- #$bodytag .= Apache::lonmenu::menubuttons($forcereg);
return $bodytag;
}
@@ -4652,6 +4739,52 @@ $bodytag
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,
+ '');
+ }
+ return @advtools;
+}
+
sub dc_courseid_toggle {
my ($dc_info) = @_;
return ' '.
@@ -4954,6 +5087,47 @@ table#LC_title_bar.LC_with_remote {
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 +5140,10 @@ dl.LC_GCI_Menu dt {
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 +5152,6 @@ dl.LC_GCI_Menu dd {
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 +5162,7 @@ table#LC_menubuttons img {
.LC_breadcrumbs_component {
float: right;
- margin: 0 1em;
+ margin: 0.25em 1em;
}
.LC_breadcrumbs_component img {
vertical-align: middle;
@@ -5044,11 +5181,10 @@ td.LC_table_cell_checkbox {
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 +5196,7 @@ td.LC_table_cell_checkbox {
clear:both;
background: #F8F8F8; /* $sidebg; */
border: 1px solid $sidebg;
- margin: 0 0 10px 0;
+ margin: 0 0 0 0;
}
.LC_fontsize_medium {
@@ -6018,6 +6154,11 @@ fieldset > legend {
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;
@@ -6040,6 +6181,11 @@ ol.LC_primary_menu {
margin: 0.2em 0 0 0;
}
+span.LC_new_message{
+ font-weight:bold;
+ color: darkred;
+}
+
ol#LC_PathBreadcrumbs {
margin: 0;
}
@@ -6193,18 +6339,15 @@ ol#LC_MenuBreadcrumbs,
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 +6356,14 @@ ul.LC_CourseBreadcrumbs li a {
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%;
@@ -6418,6 +6569,10 @@ a#LC_content_toolbar_changefolder_toggle
background-image:url(/res/adm/pages/open-all-folders.gif);
}
+a#LC_content_toolbar_management {
+ background-image:url(/res/adm/pages/conf.png);
+}
+
ul#LC_toolbar li a:hover {
background-position: bottom center;
}
@@ -6457,6 +6612,11 @@ ul.LC_funclist {
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,6 +6643,7 @@ ul.LC_funclist li {
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;
@@ -6801,8 +6962,10 @@ sub start_page {
#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();
+ } elsif (exists($args->{'bread_crumbs_menulink'})) {
+ $result .= &Apache::lonhtmlcommon::breadcrumbs('','',$args->{'bread_crumbs_menulink'});
+ } else {
+ $result .= &Apache::lonhtmlcommon::breadcrumbs();
}
}
return $result;
@@ -10898,7 +11061,7 @@ sub existing_gcitest_courses {
} else {
next;
}
- my ($tstart,$tend) = split('.',$env{$envkey});
+ my ($tstart,$tend) = split(/\./,$env{$envkey});
if (((!$tstart) || ($tstart < $now)) && ((!$tend) || ($tend > $now))) {
my $descr = $env{'course.'.$cdom.'_'.$cnum.'.description'};
if ($descr ne '') {
@@ -10909,6 +11072,81 @@ sub existing_gcitest_courses {
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 = '';
+ }
+ 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