--- loncom/interface/loncommon.pm 2008/12/16 10:41:02 1.719
+++ loncom/interface/loncommon.pm 2009/01/28 13:49:50 1.736
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.719 2008/12/16 10:41:02 ehlerst Exp $
+# $Id: loncommon.pm,v 1.736 2009/01/28 13:49:50 muellerd Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -943,24 +943,30 @@ ENDTEMPLATE
# This is a quicky function for Latex cheatsheet editing, since it
# appears in at least four places
sub helpLatexCheatsheet {
- my $other = shift;
+ my ($topic,$text,$not_author) = @_;
+ my $out;
my $addOther = '';
- if ($other) {
- $addOther = Apache::loncommon::help_open_topic($other, shift,
- undef, undef, 600) .
+ if ($topic) {
+ $addOther = &Apache::loncommon::help_open_topic($topic,$text,
+ undef, undef, 600).
'
';
}
- return ''.
- $addOther .
- &Apache::loncommon::help_open_topic("Greek_Symbols",&mt('Greek Symbols'),
- undef,undef,600)
- .' '.
- &Apache::loncommon::help_open_topic("Other_Symbols",&mt('Other Symbols'),
- undef,undef,600)
- .' '.
- &Apache::loncommon::help_open_topic("Authoring_Output_Tags",&mt('Output Tags'),
- undef,undef,600)
- .'
';
+ $out = ''.
+ $addOther .
+ &Apache::loncommon::help_open_topic("Greek_Symbols",&mt('Greek Symbols'),
+ undef,undef,600).
+ ' '.
+ &Apache::loncommon::help_open_topic("Other_Symbols",&mt('Other Symbols'),
+ undef,undef,600).
+ ' ';
+ unless ($not_author) {
+ $out .= ''.
+ &Apache::loncommon::help_open_topic("Authoring_Output_Tags",&mt('Output Tags'),
+ undef,undef,600).
+ ' ';
+ }
+ $out .= '
';
+ return $out;
}
sub general_help {
@@ -1629,7 +1635,7 @@ sub multiple_select_form {
$size = scalar(keys(%$hash));
}
}
- $output.="\n";
+ $output.="\n".'';
my @order;
if (ref($order) eq 'ARRAY') {
@order = @{$order};
@@ -2717,6 +2723,43 @@ sub flush_email_cache {
&Apache::lonnet::devalidate_cache_new('emailscache',$id);
}
+# -------------------------------------------------------------------- getlangs
+
+=pod
+
+=item * &getlangs($uname,$udom)
+
+Gets a user's language preference and returns it as a hash with key:
+language.
+
+=cut
+
+
+sub getlangs {
+ my ($uname,$udom) = @_;
+ if (!$udom) { $udom =$env{'user.domain'}; }
+ if (!$uname) { $uname=$env{'user.name'}; }
+ my $id=$uname.':'.$udom;
+ my ($langs,$cached)=&Apache::lonnet::is_cached_new('userlangs',$id);
+ if ($cached) {
+ return %{$langs};
+ } else {
+ my %loadlangs=&Apache::lonnet::get('environment',['languages'],
+ $udom,$uname);
+ &Apache::lonnet::do_cache_new('userlangs',$id,\%loadlangs);
+ return %loadlangs;
+ }
+}
+
+sub flush_langs_cache {
+ my ($uname,$udom)=@_;
+ if (!$udom) { $udom =$env{'user.domain'}; }
+ if (!$uname) { $uname=$env{'user.name'}; }
+ return if ($udom eq 'public' && $uname eq 'public');
+ my $id=$uname.':'.$udom;
+ &Apache::lonnet::devalidate_cache_new('userlangs',$id);
+}
+
# ------------------------------------------------------------------ Screenname
=pod
@@ -3168,7 +3211,7 @@ sub relative_to_absolute {
}
$thisdir=~s-/[^/]*$--;
foreach my $link (@rlinks) {
- unless (($link=~/^http:\/\//i) ||
+ unless (($link=~/^https?\:\/\//i) ||
($link=~/^\//) ||
($link=~/^javascript:/i) ||
($link=~/^mailto:/i) ||
@@ -4443,12 +4486,21 @@ table.thinborder tr td {
}
form, .inline { display: inline; }
-.center { text-align: center; }
-.left { text-align:left; }
-.right {text-align:right;}
-.middle {vertical-align:middle;}
-.top {vertical-align:top;}
-.bottom {vertical-align:bottom;}
+
+.LC_center { text-align: center; }
+.LC_left { text-align:left; }
+.LC_right {text-align:right;}
+.LC_middle {vertical-align:middle;}
+.LC_top {vertical-align:top;}
+.LC_bottom {vertical-align:bottom;}
+
+/* just for tests */
+.LC_300Box { width:300px; }
+.LC_200Box {width:200px; }
+.LC_500Box {width:500px; }
+.LC_600Box {width:600px; }
+/* end */
+
.LC_filename {font-family: $mono; white-space:pre;}
.LC_error {
color: red;
@@ -4482,7 +4534,7 @@ form, .inline { display: inline; }
}
.LC_internal_info {
- color: #999;
+ color: #999999;
}
table.LC_pastsubmission {
@@ -4704,7 +4756,7 @@ table.LC_prior_tries tr th {
font-size:90%;
}
table.LC_data_table tr.LC_info_row > td {
- background-color: #CCC;
+ background-color: #CCCCCC;
font-weight: bold;
text-align: left;
}
@@ -4752,7 +4804,7 @@ table.LC_nested_outer tr td.LC_subheader
text-align: right;
}
table.LC_nested tr.LC_info_row td {
- background-color: #CCC;
+ background-color: #CCCCCC;
font-weight: bold;
font-size: small;
text-align: center;
@@ -4762,7 +4814,7 @@ table.LC_nested_outer tr th.LC_left_item
text-align: left;
}
table.LC_nested td {
- background-color: #FFF;
+ background-color: #FFFFFF;
font-size: small;
}
table.LC_nested_outer tr th.LC_right_item,
@@ -4773,7 +4825,7 @@ table.LC_nested tr td.LC_right_item {
}
table.LC_nested tr.LC_odd_row td {
- background-color: #EEE;
+ background-color: #EEEEEE;
}
table.LC_createuser {
@@ -4784,7 +4836,7 @@ table.LC_createuser tr.LC_section_row td
}
table.LC_createuser tr.LC_info_row td {
- background-color: #CCC;
+ background-color: #CCCCCC;
font-weight: bold;
text-align: center;
}
@@ -5215,13 +5267,6 @@ table.LC_docs_documents td.LC_docs_docum
padding: 4px;
}
-.LC_docs_course_commands div {
- float: left;
- border: 4px solid #AAAAAA;
- padding: 4px;
- background: #DDDDCC;
-}
-
.LC_docs_entry_move {
border: 0px;
border-collapse: collapse;
@@ -5460,41 +5505,46 @@ div.LC_createcourse {
# --------------------------*/
a:hover,
-ol.smallMenu a:hover,
-ol#MenuBreadcrumbs a:hover,
-ul#TabMainMenuContent a:hover,
-.FormSectionClearButton input:hover{
+ol.LC_smallMenu a:hover,
+ol#LC_MenuBreadcrumbs a:hover,
+ol#LC_PathBreadcrumbs a:hover,
+ul#LC_TabMainMenuContent a:hover,
+.LC_FormSectionClearButton input:hover
+ul.LC_TabContent li:hover a{
color:#BF2317;
text-decoration:none;
}
h1 {
- padding:5px 10px 5px 0px;
+ padding:5px 10px 5px 20px;
line-height:130%;
}
h2,h3,h4,h5,h6
{
-margin:5px 0px 5px 0px;
-line-height:130%;
+ margin:5px 0px 5px 0px;
+ padding:0px;
+ line-height:130%;
}
-.hcell{
+.LC_hcell{
padding:3px 15px 3px 15px;
margin:0px;
background-color:$tabbg;
border-bottom:solid 1px $lg_border_color;
}
-.noBorder {
+.LC_noBorder {
border:0px;
}
-/*
-.bgLightGrey { background:URL(images/TabMenuBG.png) repeat-x left top; }
-.bgLightGreyYellow {background-color:#EFECE0;}
-*/
+.LC_bgLightGrey{
+ background:URL(/adm/lonIcons/lightGreyBG.png) repeat-x left top;
+}
+.LC_bgLightGreyYellow {
+ background-color:#EFECE0;
+}
/* Main Header with discription of Person, Course, etc. */
-.HeadRight {
+.LC_HeadRight {
text-align: right;
float: right;
margin: 0px;
@@ -5504,12 +5554,12 @@ line-height:130%;
overflow:hidden;
}
-p {
+p, .LC_ContentBox {
padding: 10px;
}
-.FormSectionClearButton input {
- background-color:transparent;
+.LC_FormSectionClearButton input {
+
border:0px;
cursor:pointer;
text-decoration:underline;
@@ -5520,55 +5570,80 @@ dl,ul,div,fieldset {
margin: 10px 10px 10px 0px;
overflow:hidden;
}
-ol.smallMenu {
+ol.LC_smallMenu, ol#LC_PathBreadcrumbs {
margin: 0px;
}
-ol.smallMenu li {
+ol.LC_smallMenu li {
display: inline;
padding: 5px 5px 0px 10px;
vertical-align: top;
}
-ol.smallMenu li img {
+ol.LC_smallMenu li img {
vertical-align: bottom;
}
-ol.smallMenu a {
+ol.LC_smallMenu a {
font-size: 90%;
color: RGB(80, 80, 80);
text-decoration: none;
}
-ol#TabMainMenuContent {
-
+ol#LC_TabMainMenuContent {
+ display:block;
+ list-style:none;
margin: 0px 0px 10px 0px;
padding: 0px;
}
-ol#TabMainMenuContent li {
+ol#LC_TabMainMenuContent li {
display: inline;
vertical-align: bottom;
border-bottom: solid 1px RGB(175, 175, 175);
border-right: solid 1px RGB(175, 175, 175);
- padding: 5px 15px 5px 15px;
- margin-right:4px;
+ padding: 5px 10px 5px 10px;
+ margin-right:3px;
line-height: 140%;
font-weight: bold;
- overflow:hidden;
-/* background: RGB(211, 206, 205) URL(images/TabMenuBG.png) repeat-x left top;*/
+ white-space:nowrap;
+ background: url(/adm/lonIcons/lightGreyBG.png) repeat-x left top;
}
-ol#TabMainMenuContent li a{
+ol#LC_TabMainMenuContent li a{
color: RGB(47, 47, 47);
text-decoration: none;
}
-
-ol#TabMainMenuContent div.columnSection {
- margin-bottom: 0px;
+ul.LC_TabContent {
+ margin:0px;
+ padding:0px;
+ display:block;
+ list-style:none;
+ min-height:1.5em;
+}
+ul.LC_TabContent li{
+ display:inline;
+ vertical-align:top;
+ border-bottom:solid 1px $lg_border_color;
+ border-right:solid 1px $lg_border_color;
+ padding:5px 10px 5px 10px;
+ margin-right:2px;
+ background: url(/adm/lonIcons/lightGreyBG.png) repeat-x left top;
+}
+ul.LC_TabContent li a, ul.LC_TabContent li{
+ color:rgb(47,47,47);
+ text-decoration:none;
+ font-size:95%;
+ font-weight:bold;
+ white-space:nowrap;
+}
+.LC_hideThis
+{
+ display:none;
+ visibility:hidden;
}
-ol#MenuBreadcrumbs, ol#PathBreadcrumbs {
+ol#LC_MenuBreadcrumbs, ol#LC_PathBreadcrumbs {
border-top: solid 1px RGB(255, 255, 255);
height: 20px;
line-height: 20px;
@@ -5576,36 +5651,31 @@ ol#MenuBreadcrumbs, ol#PathBreadcrumbs {
margin: 0px 0px 30px 0px;
padding-left: 10px;
list-style-position: inside;
-/* background: RGB(211, 206, 205) URL(images/TabMenuBG.png) repeat-x left
- top;*/
+ background: url(/adm/lonIcons/lightGreyBG.png) repeat-x left top;
}
-ol#MenuBreadcrumbs li, ol#PathBreadcrumbs li {
-/* background: url(images/pfeil_white.png) no-repeat left center;*/
+ol#LC_MenuBreadcrumbs li, ol#LC_PathBreadcrumbs li {
+ background: url(/adm/lonIcons/arrow_white.png) no-repeat left center;
display: inline;
padding: 0px 0px 0px 10px;
vertical-align: bottom;
overflow:hidden;
}
-ol#MenuBreadcrumbs li a {
+ol#LC_MenuBreadcrumbs li a {
text-decoration: none;
font-size:90%;
}
-ol#PathBreadcrumbs li a{
+ol#LC_PathBreadcrumbs li a{
text-decoration:none;
font-size:100%;
font-weight:bold;
}
-
-.ContentBoxSpecial
+.LC_ContentBoxSpecial
{
border: solid 1px $lg_border_color;
}
-.ContentBox {
- padding:10px;
-}
-.PopUp
+.LC_PopUp
{
padding:10px;
border-left:solid 1px $lg_border_color;
@@ -5619,20 +5689,20 @@ ol#PathBreadcrumbs li a{
z-index:5;
}
-dl.ListStyleClean dt {
+dl.LC_ListStyleClean dt {
padding-right: 5px;
display: table-header-group;
}
-dl.ListStyleClean dd {
+dl.LC_ListStyleClean dd {
display: table-row;
}
-.ListStyleClean,
-.ListStyleSimple,
-.ListStyleNormal,
-.ListStyleNormal_Border,
-.ListStyleSpecial
+.LC_ListStyleClean,
+.LC_ListStyleSimple,
+.LC_ListStyleNormal,
+.LC_ListStyleNormal_Border,
+.LC_ListStyleSpecial
{
/*display:block; */
list-style-position: inside;
@@ -5641,67 +5711,67 @@ dl.ListStyleClean dd {
padding: 0px;
}
-.ListStyleSimple li,
-.ListStyleSimple dd,
-.ListStyleNormal li,
-.ListStyleNormal dd,
-.ListStyleSpecial li,
-.ListStyleSpecial dd
+.LC_ListStyleSimple li,
+.LC_ListStyleSimple dd,
+.LC_ListStyleNormal li,
+.LC_ListStyleNormal dd,
+.LC_ListStyleSpecial li,
+.LC_ListStyleSpecial dd
{
margin: 0px;
padding: 5px 5px 5px 10px;
clear: both;
}
-.ListStyleClean li,
-.ListStyleClean dd {
+.LC_ListStyleClean li,
+.LC_ListStyleClean dd {
padding-top: 0px;
padding-bottom: 0px;
}
-.ListStyleSimple dd,
-.ListStyleSimple li{
+.LC_ListStyleSimple dd,
+.LC_ListStyleSimple li{
border-bottom: solid 1px $lg_border_color;
}
-.ListStyleSpecial li,
-.ListStyleSpecial dd {
+.LC_ListStyleSpecial li,
+.LC_ListStyleSpecial dd {
list-style-type: none;
background-color: RGB(220, 220, 220);
margin-bottom: 4px;
}
-table.SimpleTable {
+table.LC_SimpleTable {
margin:5px;
border:solid 1px $lg_border_color;
}
-table.SimpleTable tr {
+table.LC_SimpleTable tr {
padding:0px;
border:solid 1px $lg_border_color;
}
-table.SimpleTable thead{
+table.LC_SimpleTable thead{
background:rgb(220,220,220);
}
-div.columnSection {
+div.LC_columnSection {
display: block;
clear: both;
overflow: hidden;
margin:0px;
}
-div.columnSection>* {
+div.LC_columnSection>* {
float: left;
margin: 10px 20px 10px 0px;
overflow:hidden;
}
-div.columnSection > .ContentBox,
-div.columnSection > .ContentBoxSpecial
+div.LC_columnSection > .LC_ContentBox,
+div.LC_columnSection > .LC_ContentBoxSpecial
{
- width: 400px;
-
+ width: 400px;
}
+
.ContentBoxSpecialTemplate
{
border: solid 1px $lg_border_color;
@@ -5710,13 +5780,19 @@ div.columnSection > .ContentBoxSpecial
padding:10px;
}
-div.columnSection > .ContentBoxTemplate,
-div.columnSection > .ContentBoxSpecialTemplate
+div.LC_columnSection > .ContentBoxTemplate,
+div.LC_columnSection > .ContentBoxSpecialTemplate
{
width: 600px;
}
+.clear{
+ clear: both;
+ line-height: 0px;
+ font-size: 0px;
+ height: 0px;
+}
.LC_loginpage_container {
text-align:left;
@@ -7903,7 +7979,7 @@ sub upfile_select_html {
# xml => &mt('HTML/XML'),
);
my $Str = ' '.
- ' Type: ';
+ ' '.&mt('Type').': ';
foreach my $type (sort(keys(%Types))) {
$Str .= ''.$Types{$type}." \n";
}
@@ -7991,7 +8067,7 @@ sub csv_print_select_table {
&end_data_table_header_row()."\n");
foreach my $array_ref (@$d) {
my ($value,$display,$defaultcol)=@{ $array_ref };
- $r->print(&start_data_table_row().''.$display.' ');
+ $r->print(&start_data_table_row().''.$display.' ');
$r->print('');
@@ -9327,7 +9403,9 @@ sub construct_course {
'policy.email',
'comment.email',
'pch.users.denied',
- 'plc.users.denied'],
+ 'plc.users.denied',
+ 'hidefromcat',
+ 'categories'],
$$crsudom,$$crsunum);
}
@@ -9785,6 +9863,11 @@ sub init_user_environment {
}
}
+ foreach my $tool ('aboutme','blog','portfolio') {
+ $userenv{'availabletools.'.$tool} =
+ &Apache::lonnet::usertools_access($username,$domain,$tool,'reload');
+ }
+
$env{'user.environment'} = "$lonids/$cookie.id";
if (tie(my %disk_env,'GDBM_File',"$lonids/$cookie.id",
@@ -9823,7 +9906,7 @@ sub _add_to_env {
# --- Get the symbolic name of a problem and the url
sub get_symb {
my ($request,$silent) = @_;
- (my $url=$env{'form.url'}) =~ s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--;
+ (my $url=$env{'form.url'}) =~ s-^https?\://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--;
my $symb=($env{'form.symb'} ne '' ? $env{'form.symb'} : (&Apache::lonnet::symbread($url)));
if ($symb eq '') {
if (!$silent) {
@@ -9850,11 +9933,13 @@ sub get_annotation {
}
sub clean_symb {
- my ($symb) = @_;
+ my ($symb,$delete_enc) = @_;
&Apache::lonenc::check_decrypt(\$symb);
my $enc = $env{'request.enc'};
- delete($env{'request.enc'});
+ if ($delete_enc) {
+ delete($env{'request.enc'});
+ }
return ($symb,$enc);
}