--- loncom/interface/loncommon.pm 2008/12/15 11:44:41 1.717 +++ loncom/interface/loncommon.pm 2008/12/23 19:22:13 1.728 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.717 2008/12/15 11:44:41 tempelho Exp $ +# $Id: loncommon.pm,v 1.728 2008/12/23 19:22:13 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -2717,6 +2717,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 +3205,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 +4480,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; @@ -4456,7 +4502,7 @@ form, .inline { display: inline; } } .LC_warning, .LC_diff_removed { - color: red; + } .LC_info, @@ -5460,41 +5506,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 +5555,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 +5571,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 +5652,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 +5690,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,66 +5712,87 @@ 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; +} +.ContentBoxTemplate { + padding:10px; +} + +div.LC_columnSection > .ContentBoxTemplate, +div.LC_columnSection > .ContentBoxSpecialTemplate + { + width: 600px; + +} + +.clear{ + clear: both; + line-height: 0px; + font-size: 0px; + height: 0px; } .LC_loginpage_container { @@ -6031,13 +6123,14 @@ sub start_page { $result = &html_encode($result); } - if (exists $args->{'bread_crumbs'}) { - &Apache::lonhtmlcommon::clear_breadcrumbs(); - my $temp = $args->{'bread_crumbs'}; - foreach my $crumb (@$temp){ - &Apache::lonhtmlcommon::add_breadcrumb($crumb); - } - $result .= &Apache::lonhtmlcommon::breadcrumbs(); + if (exists($args->{'bread_crumbs'})) { + &Apache::lonhtmlcommon::clear_breadcrumbs(); + if (ref($args->{'bread_crumbs'}) eq 'ARRAY') { + foreach my $crumb (@{$args->{'bread_crumbs'}}){ + &Apache::lonhtmlcommon::add_breadcrumb($crumb); + } + } + $result .= &Apache::lonhtmlcommon::breadcrumbs(); } return $result; @@ -7887,7 +7980,7 @@ sub upfile_select_html { # xml => &mt('HTML/XML'), ); my $Str = ''. - '
Type: '; foreach my $type (sort(keys(%Types))) { $Str .= '\n"; } @@ -9311,7 +9404,9 @@ sub construct_course { 'policy.email', 'comment.email', 'pch.users.denied', - 'plc.users.denied'], + 'plc.users.denied', + 'hidefromcat', + 'categories'], $$crsudom,$$crsunum); } @@ -9769,6 +9864,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", @@ -9807,7 +9907,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) {