--- loncom/interface/loncommon.pm 2009/11/20 04:12:43 1.917
+++ loncom/interface/loncommon.pm 2009/12/07 20:04:18 1.925.2.2
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.917 2009/11/20 04:12:43 raeburn Exp $
+# $Id: loncommon.pm,v 1.925.2.2 2009/12/07 20:04:18 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1877,7 +1877,7 @@ sub select_form {
$selectform.=
'\n";
+ ">".$hash{$key}."\n";
}
$selectform.="";
return $selectform;
@@ -4367,18 +4367,30 @@ sub CSTR_pageheader {
} else {
$lastitem = $thisdisfn;
}
- return
+
+ my $output =
'
'
.&Apache::loncommon::help_open_menu('','',3,'Authoring') #FIXME: Broken? Where is it?
.''.&mt('Construction Space:').' '
.''
.&Apache::lonmenu::constspaceform()
.'
';
+
+ return $output;
}
###############################################
@@ -4515,6 +4527,7 @@ sub bodytag {
if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') {
return $bodytag;
}
+ my $custommenu = &needs_gci_custom();
if ($env{'request.state'} eq 'construct') { $forcereg=1; }
@@ -4536,7 +4549,7 @@ sub bodytag {
$bodytag .= qq|$name $role
|;
$bodytag .= Apache::lonhtmlcommon::scripttag(
- Apache::lonmenu::utilityfunctions(), 'start');
+ Apache::lonmenu::utilityfunctions('',$custommenu), 'start');
$bodytag .= Apache::lonmenu::primary_menu();
@@ -4547,10 +4560,19 @@ sub bodytag {
#don't show menus for public users
if($env{'user.name'} ne 'public' && $env{'user.domain'} ne 'public'){
- $bodytag .= Apache::lonmenu::secondary_menu();
+ if ($custommenu) {
+ $bodytag .= &Apache::lonmenu::gci_secondary_menu();
+ } else {
+ $bodytag .= Apache::lonmenu::secondary_menu();
+ }
$bodytag .= Apache::lonmenu::serverform();
- $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end');
- $bodytag .= Apache::lonmenu::innerregister($forcereg) if $forcereg;
+ $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end');
+ if ($env{'request.state'} eq 'construct') {
+ $bodytag .= &Apache::lonmenu::innerregister($forcereg,'',
+ $args->{'bread_crumbs'});
+ } elsif ($forcereg) {
+ $bodytag .= &Apache::lonmenu::innerregister($forcereg);
+ }
}else{
# this is to seperate menu from content when there's no secondary
# menu. Especially needed for public accessible ressources.
@@ -4751,11 +4773,6 @@ body {
color:$font;
}
-a:link,
-a:visited {
- font-size:100%;
-}
-
a:focus {
color: red;
background: yellow;
@@ -4782,6 +4799,7 @@ form, .inline {
.LC_filename {
font-family: $mono;
white-space:pre;
+ font-size: 120%;
}
.LC_fileicon {
@@ -4872,9 +4890,7 @@ table.LC_pastsubmission {
margin: 2px;
}
-table#LC_top_nav,
-table#LC_menubuttons,
-table#LC_nav_location {
+table#LC_menubuttons {
width: 100%;
background: $pgbg;
border: 2px;
@@ -4954,41 +4970,6 @@ table#LC_menubuttons img {
border: none;
}
-table#LC_top_nav td {
- background: $tabbg;
- border: none;
- font-size: small;
- vertical-align:top;
- padding:2px 5px 2px 5px;
-}
-
-table#LC_top_nav td a,
-div#LC_top_nav a {
- color: $font;
-}
-
-table#LC_top_nav td.LC_top_nav_logo {
- background: $tabbg;
- text-align: left;
- white-space: nowrap;
- width: 31px;
-}
-
-table#LC_top_nav td.LC_top_nav_logo img {
- border: none;
- vertical-align: bottom;
-}
-
-table#LC_top_nav td.LC_top_nav_exit,
-table#LC_top_nav td.LC_top_nav_help {
- width: 2.0em;
-}
-
-table#LC_top_nav td.LC_top_nav_login {
- width: 4.0em;
- text-align: center;
-}
-
.LC_breadcrumbs_component {
float: right;
margin: 0 1em;
@@ -5001,10 +4982,6 @@ td.LC_table_cell_checkbox {
text-align: center;
}
-table#LC_mainmenu td.LC_mainmenu_column {
- vertical-align: top;
-}
-
.LC_fontsize_small {
font-size: 70%;
}
@@ -5066,11 +5043,6 @@ td.LC_menubuttons_text {
background: $tabbg;
}
-.LC_new_mail {
- background: $tabbg;
- font-weight: bold;
-}
-
table.LC_data_table,
table.LC_mail_list {
border: 1px solid #000000;
@@ -5256,12 +5228,6 @@ table.LC_mail_list tr.LC_mail_new:hover
background-color: $mail_new_hover;
}
-table.LC_mail_list tr.LC_mail_even {
-}
-
-table.LC_mail_list tr.LC_mail_odd {
-}
-
table.LC_mail_list tr.LC_mail_read {
background-color: $mail_read;
}
@@ -5541,15 +5507,17 @@ table.LC_notify_front_page td {
.LC_topic_bar {
font-weight: bold;
- width: 100%;
background: $tabbg;
- vertical-align: middle;
- margin: 2ex 0ex 2ex 0ex;
+ margin: 1em 0em 1em 2em;
padding: 3px;
+ font-size: 1.2em;
}
.LC_topic_bar span {
+ left: 0.5em;
+ position: absolute;
vertical-align: middle;
+ font-size: 1.2em;
}
.LC_topic_bar img {
@@ -5665,12 +5633,12 @@ span.LC_prior_string,
span.LC_prior_custom,
span.LC_prior_reaction,
span.LC_prior_math {
- font-family: monospace;
+ font-family: $mono;
white-space: pre;
}
span.LC_prior_string {
- font-family: monospace;
+ font-family: $mono;
white-space: pre;
}
@@ -5703,17 +5671,6 @@ span.LC_cusr_subheading {
font-size: 85%;
}
-table.LC_docs_documents {
- background: #BBBBBB;
- border-width: 0;
- border-collapse: collapse;
-}
-
-table.LC_docs_documents td.LC_docs_document {
- border: 2px solid black;
- padding: 4px;
-}
-
div.LC_docs_entry_move {
border: 1px solid #BBBBBB;
background: #DDDDDD;
@@ -5914,21 +5871,8 @@ img.stift {
vertical-align: middle;
}
-table#LC_mainmenu {
- margin-top:10px;
- width:80%;
-}
-
-table#LC_mainmenu td.LC_mainmenu_col_fieldset {
+table td.LC_mainmenu_col_fieldset {
vertical-align: top;
- width: 45%;
-}
-
-.LC_mainmenu_fieldset_category {
- color: $font;
- background: $pgbg;
- font-size: small;
- font-weight: bold;
}
div.LC_createcourse {
@@ -5991,12 +5935,6 @@ h6 {
border: 0;
}
-.LC_Right {
- float: right;
- margin: 0;
- padding: 0;
-}
-
.LC_FormSectionClearButton input {
background-color:transparent;
border: none;
@@ -6254,7 +6192,6 @@ dl.LC_ListStyleClean dd {
.LC_ListStyleClean,
.LC_ListStyleSimple,
.LC_ListStyleNormal,
-.LC_ListStyle_Border,
.LC_ListStyleSpecial {
/* display:block; */
list-style-position: inside;
@@ -6389,11 +6326,6 @@ table.LC_tableOfContent a {
text-decoration: none;
}
-table.LC_tableBrowseRes tr.LC_trOdd,
-table.LC_tableOfContent tr.LC_trOdd {
- background-color: #EEEEEE;
-}
-
table.LC_tableOfContent img {
border: none;
height: 1.3em;
@@ -6492,6 +6424,36 @@ ul.LC_funclist li {
line-height: 150%;
}
+#gciheader {
+ float:left;
+ width:100%;
+ background:#DAE0D2 url("/gcimenu_bg.gif") repeat-x bottom;
+ font-size:93%;
+ line-height:normal;
+}
+#gciheader ul {
+ margin:0;
+ padding:10px 10px 0;
+ list-style:none;
+}
+#gciheader li {
+ float:left;
+ background:url("/gcimenu_left.gif") no-repeat left top;
+ margin:0;
+ padding:0 0 0 9px;
+}
+#gciheader a {
+ display:block;
+ background:url("/gcimenu_right.gif") no-repeat right top;
+ padding:5px 15px 4px 6px;
+}
+#gciheader #current {
+ background-image:url("/gcimenu_left_on.gif");
+}
+#gciheader #current a {
+ background-image:url("/gcimenu_right_on.gif");
+ padding-bottom:5px;
+}
END
}
@@ -6768,6 +6730,11 @@ sub start_page {
# Don't add anything more if only_body wanted
return $result if $args->{'only_body'};
+ #Breadcrumbs for Construction Space provided by &bodytag.
+ if (($env{'environment.remote'} eq 'off') && ($env{'request.state'} eq 'construct')) {
+ return $result;
+ }
+
#Breadcrumbs
if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) {
&Apache::lonhtmlcommon::clear_breadcrumbs();
@@ -9646,6 +9613,8 @@ sub extract_categories {
my $trailstr;
if ($name eq 'instcode') {
$trailstr = &mt('Official courses (with institutional codes)');
+ } elsif ($name eq 'communities') {
+ $trailstr = &mt('Communities');
} else {
$trailstr = $name;
}
@@ -9758,12 +9727,14 @@ cathash - reference to hash of categorie
currcat - scalar with an & separated list of categories assigned to a course.
+type - scalar contains course type (Course or Community).
+
Returns: $output (markup to be displayed)
=cut
sub assign_categories_table {
- my ($cathash,$currcat) = @_;
+ my ($cathash,$currcat,$type) = @_;
my $output;
if (ref($cathash) eq 'HASH') {
my (@cats,@trails,%allitems,%idx,@jsarray,@path,$maxdepth);
@@ -9772,15 +9743,20 @@ sub assign_categories_table {
if (@cats > 0) {
my $itemcount = 0;
if (ref($cats[0]) eq 'ARRAY') {
- $output = &Apache::loncommon::start_data_table();
my @currcategories;
if ($currcat ne '') {
@currcategories = split('&',$currcat);
}
+ my $table;
for (my $i=0; $i<@{$cats[0]}; $i++) {
my $parent = $cats[0][$i];
- my $css_class = $itemcount%2?' class="LC_odd_row"':'';
next if ($parent eq 'instcode');
+ if ($type eq 'Community') {
+ next unless ($parent eq 'communities');
+ } else {
+ next if ($parent eq 'communities');
+ }
+ my $css_class = $itemcount%2?' class="LC_odd_row"':'';
my $item = &escape($parent).'::0';
my $checked = '';
if (@currcategories > 0) {
@@ -9788,18 +9764,26 @@ sub assign_categories_table {
$checked = ' checked="checked"';
}
}
- $output .= ''.
- ''.$parent.''.
- ' | ';
+ my $parent_title = $parent;
+ if ($parent eq 'communities') {
+ $parent_title = &mt('Communities');
+ }
+ $table .= '
'.
+ ''.$parent_title.''.
+ ' | ';
my $depth = 1;
push(@path,$parent);
- $output .= &assign_category_rows($itemcount,\@cats,$depth,$parent,\@path,\@currcategories);
+ $table .= &assign_category_rows($itemcount,\@cats,$depth,$parent,\@path,\@currcategories);
pop(@path);
- $output .= '
|
';
+ $table .= ' |
';
$itemcount ++;
}
- $output .= &Apache::loncommon::end_data_table();
+ if ($itemcount) {
+ $output = &Apache::loncommon::start_data_table().
+ $table.
+ &Apache::loncommon::end_data_table();
+ }
}
}
}
@@ -10732,6 +10716,86 @@ sub clean_symb {
return ($symb,$enc);
}
+sub needs_gci_custom {
+ my $custommenu;
+ my $numdc = &check_for_gci_dc();
+ unless ($numdc) {
+ my $then=$env{'user.login.time'};
+ my $now = time;
+ my %cnums = (
+ review => '9615072b469884921gcil1',
+ submit => '1H96711d710194bfegcil1',
+ );
+ if ($env{'user.role.st./gci/'.$cnums{'review'}}) {
+ my ($start,$end) =
+ split('.',$env{'user.role.st./gci/'.$cnums{'review'}});
+ if (((!$start) || ($start && $start <= $now)) &&
+ ((!$end) || ($end > $now))) {
+ $custommenu = 1;
+ if ($env{'user.role.cc./gci/'.$cnums{'review'}}) {
+ my ($ccstart,$ccend) =
+ split('.',$env{'user.role.cc./gci/'.$cnums{'review'}});
+ if (((!$start) || ($start && $start <= $now)) &&
+ ((!$end) || ($end > $now))) {
+ $custommenu = '';
+ }
+ }
+ }
+ }
+ }
+ return $custommenu;
+}
+
+sub check_for_gci_dc {
+ my $then=$env{'user.login.time'};
+ my $numdc = 0;
+ foreach my $dom ('gci','gcitest') {
+ if ($env{'user.role.dc./'.$dom.'/'}) {
+ my $livedc = 1;
+ my ($tstart,$tend)=split(/\./,$env{'user.role.dc./'.$dom.'/'});
+ if ($tstart && $tstart>$then) { $livedc = 0; }
+ if ($tend && $tend <$then) { $livedc = 0; }
+ if ($livedc) {
+ $numdc++;
+ }
+ }
+ }
+ return $numdc;
+}
+
+sub existing_gcitest_courses {
+ my %courses;
+ my $cdom = 'gcitest';
+ my $role = 'cc';
+ my $now = time;
+ foreach my $envkey (keys(%env)) {
+ my $cnum;
+ if ($envkey =~ m{^user\.role\.\Q$role\E\./\Q$cdom\E/($match_courseid)$}) {
+ $cnum = $1;
+ } else {
+ next;
+ }
+ my ($tstart,$tend) = split(':',$env{$envkey});
+ if (((!$tstart) || ($tstart < $now)) && ((!$tend) || ($tend > $now))) {
+ my %coursehash = &Apache::lonnet::coursedescription($cdom.'/'.$cnum);
+ $courses{$cdom.'_'.$cnum}{'description'} = $coursehash{'description'};
+ $courses{$cdom.'_'.$cnum}{'owner'} = $coursehash{'internal.courseowner'};
+ if (defined($coursehash{'default_enrollment_start_date'}) ) {
+ $courses{$cdom.'_'.$cnum}{'startaccess'} =
+ &Apache::lonlocal::locallocaltime($coursehash{'default_enrollment_start_date'});
+ }
+ if (defined($coursehash{'default_enrollment_end_date'}) ) {
+ $courses{$cdom.'_'.$cnum}{'endaccess'} =
+ &Apache::lonlocal::locallocaltime($coursehash{'default_enrollment_end_date'});
+ if ($coursehash{'default_enrollment_end_date'} == 0) {
+ $courses{$cdom.'_'.$cnum}{'endaccess'} = &mt('No ending date');
+ }
+ }
+ }
+ }
+ return %courses;
+}
+
=pod
=back