--- loncom/interface/loncommon.pm 2009/01/30 11:39:38 1.738 +++ loncom/interface/loncommon.pm 2009/05/30 22:03:32 1.835 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.738 2009/01/30 11:39:38 tempelho Exp $ +# $Id: loncommon.pm,v 1.835 2009/05/30 22:03:32 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -406,9 +406,10 @@ sub studentbrowser_javascript { || ($env{'request.role'}=~/^(au|dc|su)/) ) { return ''; } return (<<'ENDSTDBRW'); - ENDSTDBRW } sub selectstudent_link { - my ($form,$unameele,$udomele)=@_; + my ($form,$unameele,$udomele,$courseadvonly)=@_; + my $callargs = "'".$form."','".$unameele."','".$udomele."'"; if ($env{'request.course.id'}) { if (!&Apache::lonnet::allowed('srm',$env{'request.course.id'}) && !&Apache::lonnet::allowed('srm',$env{'request.course.id'}. '/'.$env{'request.course.sec'})) { return ''; } - return "".&mt('Select User').""; + if ($courseadvonly) { + $callargs .= ",'',1,1"; + } + return ''. + ''. + &mt('Select User').''; } if ($env{'request.role'}=~/^(au|dc|su)/) { - return "".&mt('Select User').""; + $callargs .= ",1"; + return ''. + ''. + &mt('Select User').''; } return ''; } sub authorbrowser_javascript { return <<"ENDAUTHORBRW"; - ENDAUTHORBRW } @@ -473,7 +485,8 @@ sub coursebrowser_javascript { my ($domainfilter,$sec_element,$formname)=@_; my $crs_or_grp_alert = &mt('Please select the type of LON-CAPA entity - Course or Group - for which you wish to add/modify a user role'); my $output = ' -'; return $output; } @@ -602,8 +620,13 @@ function setSect(sectionlist) { sub selectcourse_link { my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype)=@_; - return "".&mt('Select Course').""; + return '' + ."".&mt('Select Course').'' + .''; } sub selectauthor_link { @@ -710,6 +733,21 @@ sub select_datelocale { return $output; } +sub select_language { + my ($name,$selected,$includeempty) = @_; + my %langchoices; + if ($includeempty) { + %langchoices = ('' => 'No language preference'); + } + foreach my $id (&languageids()) { + my $code = &supportedlanguagecode($id); + if ($code) { + $langchoices{$code} = &plainlanguagedescription($id); + } + } + return &select_form($selected,$name,%langchoices); +} + =pod =item * &linked_select_forms(...) @@ -796,7 +834,8 @@ sub linked_select_forms { my $first = "document.$formname.$firstselectname"; # output the javascript to do the changing my $result = ''; - $result.=" END # output the initial values for the selection lists @@ -903,9 +943,6 @@ sub help_open_topic { my ($topic, $text, $stayOnPage, $width, $height) = @_; $text = "" if (not defined $text); $stayOnPage = 0 if (not defined $stayOnPage); - if ($env{'browser.interface'} eq 'textual') { - $stayOnPage=1; - } $width = 350 if (not defined $width); $height = 400 if (not defined $height); my $filename = $topic; @@ -923,19 +960,23 @@ sub help_open_topic { } # Add the text - if ($text ne "") { - $template .= - "". - "
$text"; + if ($text ne "") { + $template.='' + .'' + .$text.''; } - # Add the graphic + # (Always) Add the graphic my $title = &mt('Online Help'); my $helpicon=&lonhttpdurl("/adm/help/help.png"); - $template .= <<"ENDTEMPLATE"; - (Help: $topic) -ENDTEMPLATE - if ($text ne '') { $template.='
' }; + $template.=' ' + .''.&mt('Help: [_1]',$topic).''; + if ($text ne "") { + $template.=''; + } return $template; } @@ -947,25 +988,26 @@ sub helpLatexCheatsheet { my $out; my $addOther = ''; if ($topic) { - $addOther = &Apache::loncommon::help_open_topic($topic,$text, - undef, undef, 600). - ''; - } - $out = ''; + $addOther = ''.&Apache::loncommon::help_open_topic($topic,&mt($text), + undef, undef, 600). + ' '; + } + $out = '' # Start cheatsheet + .$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 .= ''; + $out .= ' ' + .&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). - ''. - &Apache::loncommon::help_open_topic("Authoring_Output_Tags",&mt('Output Tags'), - undef,undef,600). - '
'; + $out .= ''; # End cheatsheet return $out; } @@ -993,7 +1035,9 @@ sub update_help_link { my $banner_link = "/adm/helpmenu?page=banner&topic=$topic&component_help=$component_help&faq=$faq&bug=$bug&origurl=$origurl&stamp=$timestamp&stayonpage=$stayOnPage"; my $output .= <<"ENDOUTPUT"; ENDOUTPUT return $output; @@ -1006,8 +1050,7 @@ sub help_open_menu { $stayOnPage = 0 if (not defined $stayOnPage); # only use pop-up help (stayOnPage == 0) # if environment.remote is on (using remote control UI) - if ($env{'browser.interface'} eq 'textual' || - $env{'environment.remote'} eq 'off' ) { + if ($env{'environment.remote'} eq 'off' ) { $stayOnPage=1; } my $output; @@ -1031,8 +1074,7 @@ sub top_nav_help { my ($text) = @_; $text = &mt($text); my $stay_on_page = - ($env{'browser.interface'} eq 'textual' || - $env{'environment.remote'} eq 'off' ); + ($env{'environment.remote'} eq 'off' ); my $link = ($stay_on_page) ? "javascript:helpMenu('display')" : "javascript:helpMenu('open')"; my $banner_link = &update_help_link(undef,undef,undef,undef,$stay_on_page); @@ -1049,8 +1091,7 @@ sub help_menu_js { my ($text) = @_; my $stayOnPage = - ($env{'browser.interface'} eq 'textual' || - $env{'environment.remote'} eq 'off' ); + ($env{'environment.remote'} eq 'off' ); my $width = 620; my $height = 600; @@ -1109,8 +1150,7 @@ sub help_open_bug { unless ($Apache::lonnet::perlvar{'BugzillaHost'}) { return ''; } $text = "" if (not defined $text); $stayOnPage = 0 if (not defined $stayOnPage); - if ($env{'browser.interface'} eq 'textual' || - $env{'environment.remote'} eq 'off' ) { + if ($env{'environment.remote'} eq 'off' ) { $stayOnPage=1; } $width = 600 if (not defined $width); @@ -1154,8 +1194,7 @@ sub help_open_faq { unless ($Apache::lonnet::perlvar{'FAQHost'}) { return ''; } $text = "" if (not defined $text); $stayOnPage = 0 if (not defined $stayOnPage); - if ($env{'browser.interface'} eq 'textual' || - $env{'environment.remote'} eq 'off' ) { + if ($env{'environment.remote'} eq 'off' ) { $stayOnPage=1; } $width = 350 if (not defined $width); @@ -1365,6 +1404,7 @@ sub resize_textarea_js { my $geometry = &viewport_geometry_js(); return <<"RESIZE"; RESIZE @@ -1746,7 +1787,7 @@ sub select_level_form { =pod -=item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc) +=item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$autosubmit) Returns a string containing a \n"; + my $selectdomain = "'."\n"; if ($default) { - $result .= ''."\n"; } foreach my $hostid (sort(keys(%servers))) { @@ -2115,14 +2162,14 @@ sub authform_kerberos { $autharg,$jscall); my ($authnum,%can_assign) = &get_assignable_auth($in{'domain'}); if ($in{'kerb_def_auth'} eq 'krb5') { - $check5 = ' checked="on"'; + $check5 = ' checked="checked"'; } else { - $check4 = ' checked="on"'; + $check4 = ' checked="checked"'; } $krbarg = $in{'kerb_def_dom'}; if (defined($in{'curr_authtype'})) { if ($in{'curr_authtype'} eq 'krb') { - $krbcheck = ' checked="on"'; + $krbcheck = ' checked="checked"'; if (defined($in{'mode'})) { if ($in{'mode'} eq 'modifyuser') { $krbcheck = ''; @@ -2130,10 +2177,10 @@ sub authform_kerberos { } if (defined($in{'curr_kerb_ver'})) { if ($in{'curr_krb_ver'} eq '5') { - $check5 = ' checked="on"'; + $check5 = ' checked="checked"'; $check4 = ''; } else { - $check4 = ' checked="on"'; + $check4 = ' checked="checked"'; $check5 = ''; } } @@ -2154,7 +2201,7 @@ sub authform_kerberos { } } else { if ($authnum == 1) { - $authtype = ''; + $authtype = ''; } } if (!$can_assign{'krb4'} && !$can_assign{'krb5'}) { @@ -2163,7 +2210,7 @@ sub authform_kerberos { if (defined($in{'mode'})) { if ($in{'mode'} eq 'modifycourse') { if ($authnum == 1) { - $authtype = ''; + $authtype = ''; } } } @@ -2224,7 +2271,7 @@ sub authform_internal{ if (defined($in{'curr_authtype'})) { if ($in{'curr_authtype'} eq 'int') { if ($can_assign{'int'}) { - $intcheck = 'checked="on" '; + $intcheck = 'checked="checked" '; if (defined($in{'mode'})) { if ($in{'mode'} eq 'modifyuser') { $intcheck = ''; @@ -2240,7 +2287,7 @@ sub authform_internal{ } } else { if ($authnum == 1) { - $authtype = ''; + $authtype = ''; } } if (!$can_assign{'int'}) { @@ -2249,7 +2296,7 @@ sub authform_internal{ if (defined($in{'mode'})) { if ($in{'mode'} eq 'modifycourse') { if ($authnum == 1) { - $authtype = ''; + $authtype = ''; } } } @@ -2264,7 +2311,7 @@ sub authform_internal{ $result = &mt ('[_1] Internally authenticated (with initial password [_2])', ''.$autharg); - $result.="'; + $result.="'; return $result; } @@ -2279,7 +2326,7 @@ sub authform_local{ if (defined($in{'curr_authtype'})) { if ($in{'curr_authtype'} eq 'loc') { if ($can_assign{'loc'}) { - $loccheck = 'checked="on" '; + $loccheck = 'checked="checked" '; if (defined($in{'mode'})) { if ($in{'mode'} eq 'modifyuser') { $loccheck = ''; @@ -2295,7 +2342,7 @@ sub authform_local{ } } else { if ($authnum == 1) { - $authtype = ''; + $authtype = ''; } } if (!$can_assign{'loc'}) { @@ -2304,7 +2351,7 @@ sub authform_local{ if (defined($in{'mode'})) { if ($in{'mode'} eq 'modifycourse') { if ($authnum == 1) { - $authtype = ''; + $authtype = ''; } } } @@ -2333,7 +2380,7 @@ sub authform_filesystem{ if (defined($in{'curr_authtype'})) { if ($in{'curr_authtype'} eq 'fsys') { if ($can_assign{'fsys'}) { - $fsyscheck = 'checked="on" '; + $fsyscheck = 'checked="checked" '; if (defined($in{'mode'})) { if ($in{'mode'} eq 'modifyuser') { $fsyscheck = ''; @@ -2346,7 +2393,7 @@ sub authform_filesystem{ } } else { if ($authnum == 1) { - $authtype = ''; + $authtype = ''; } } if (!$can_assign{'fsys'}) { @@ -2355,7 +2402,7 @@ sub authform_filesystem{ if (defined($in{'mode'})) { if ($in{'mode'} eq 'modifycourse') { if ($authnum == 1) { - $authtype = ''; + $authtype = ''; } } } @@ -2779,6 +2826,26 @@ sub screenname { } +# ------------------------------------------------------------- Confirm Wrapper +=pod + +=item confirmwrapper + +Wrap messages about completion of operation in box + +=cut + +sub confirmwrapper { + my ($message)=@_; + if ($message) { + return "\n".'
'."\n" + .$message."\n" + .'
'."\n"; + } else { + return $message; + } +} + # ------------------------------------------------------------- Message Wrapper sub messagewrapper { @@ -2789,6 +2856,7 @@ sub messagewrapper { '&subject='.&escape($subject).'&text='.&escape($text).'" '. 'title="'.&mt('Send message').'">'.$link.''; } + # --------------------------------------------------------------- Notes Wrapper sub noteswrapper { @@ -2796,6 +2864,7 @@ sub noteswrapper { return "$link"; } + # ------------------------------------------------------------- Aboutme Wrapper sub aboutmewrapper { @@ -2804,17 +2873,18 @@ sub aboutmewrapper { return; } return ''.$link.''; + ($target?' target="$target"':'').' title="'.&mt("View this user's personal information page").'">'.$link.''; } # ------------------------------------------------------------ Syllabus Wrapper - sub syllabuswrapper { my ($linktext,$coursedir,$domain)=@_; return qq{$linktext}; } +# ----------------------------------------------------------------------------- + sub track_student_link { my ($linktext,$sname,$sdom,$target,$start) = @_; my $link ="/adm/trackstudent?"; @@ -2836,6 +2906,27 @@ sub track_student_link { &help_open_topic('View_recent_activity'); } +sub slot_reservations_link { + my ($linktext,$sname,$sdom,$target) = @_; + my $link ="/adm/slotrequest?command=showresv&origin=aboutme"; + my $title = 'View slot reservation history'; + if (defined($sname) && $sname !~ /^\s*$/ && + defined($sdom) && $sdom !~ /^\s*$/) { + $link .= "&uname=$sname&udom=$sdom"; + $title .= ' of this student'; + } + if (defined($target) && $target !~ /^\s*$/) { + $target = qq{target="$target"}; + } else { + $target = ''; + } + $title = &mt($title); + $linktext = &mt($linktext); + return qq{$linktext}; +# FIXME uncomment when help item created: &help_open_topic('Slot_Reservation_History'); + +} + # ===================================================== Display a student photo @@ -3073,6 +3164,29 @@ sub languages { return $preferred_possibilities[0]; } +sub user_lang { + my ($touname,$toudom,$fromcid) = @_; + my @userlangs; + if (($fromcid ne '') && ($env{'course.'.$fromcid.'.languages'} ne '')) { + @userlangs=(@userlangs,split(/\s*(\,|\;|\:)\s*/, + $env{'course.'.$fromcid.'.languages'})); + } else { + my %langhash = &getlangs($touname,$toudom); + if ($langhash{'languages'} ne '') { + @userlangs = split(/\s*(\,|\;|\:)\s*/,$langhash{'languages'}); + } else { + my %domdefs = &Apache::lonnet::get_domain_defaults($toudom); + if ($domdefs{'lang_def'} ne '') { + @userlangs = ($domdefs{'lang_def'}); + } + } + } + my @languages=&Apache::lonlocal::get_genlanguages(@userlangs); + my $user_lh = Apache::localize->get_handle(@languages); + return $user_lh; +} + + ############################################################### ## Student Answer Attempts ## ############################################################### @@ -3788,7 +3902,7 @@ sub blocking_status { &Apache::lonnet::coursedescription($course); $coursedesc = $courseinfo{'description'}; } - $category = "Group files in the course '$coursedesc'"; + $category = "Group portfolio in the course '$coursedesc'"; } else { $category = 'Portfolio files belonging to '; if ($env{'user.name'} eq 'public' && @@ -4042,41 +4156,120 @@ Returns: value of designparamter $which ############################################## sub designparm { my ($which,$domain)=@_; - if ($env{'browser.blackwhite'} eq 'on') { - if ($which=~/\.(font|alink|vlink|link|textcol)$/) { - return '#000000'; - } - if ($which=~/\.(pgbg|sidebg|bgcol)$/) { - return '#FFFFFF'; - } - if ($which=~/\.tabbg$/) { - return '#CCCCCC'; - } - } if (exists($env{'environment.color.'.$which})) { - return $env{'environment.color.'.$which}; + return $env{'environment.color.'.$which}; } $domain=&determinedomain($domain); my %domdesign = &get_domainconf($domain); my $output; if ($domdesign{$domain.'.'.$which} ne '') { - $output = $domdesign{$domain.'.'.$which}; + $output = $domdesign{$domain.'.'.$which}; } else { $output = $defaultdesign{$which}; } if (($which =~ /^(student|coordinator|author|admin)\.img$/) || ($which =~ /login\.(img|logo|domlogo|login)/)) { if ($output =~ m{^/(adm|res)/}) { - if ($output =~ m{^/res/}) { - my $local_name = &Apache::lonnet::filelocation('',$output); - &Apache::lonnet::repcopy($local_name); - } + if ($output =~ m{^/res/}) { + my $local_name = &Apache::lonnet::filelocation('',$output); + &Apache::lonnet::repcopy($local_name); + } $output = &lonhttpdurl($output); } } return $output; } +############################################## +=pod + +=item * &authorspace() + +Inputs: ./. + +Returns: Path to the Construction Space of the current user's + accessed author space + The author space will be that of the current user + when accessing the own author space + and that of the co-author/assistent co-author + when accessing the co-author's/assistent co-author's + space + +=cut + +sub authorspace { + my $caname = ''; + if ($env{'request.role'} =~ /^ca|^aa/) { + (undef,$caname) = + ($env{'request.role'}=~/($match_domain)\/($match_username)$/); + } else { + $caname = $env{'user.name'}; + } + return '/priv/'.$caname.'/'; +} + +############################################## +=pod + +=item * &head_subbox() + +Inputs: $content (contains HTML code with page functions, etc.) + +Returns: HTML div with $content + To be included in page header + +=cut + +sub head_subbox { + my ($content)=@_; + my $output = + '
' #FIXME: solve conflicts with lonhtmlcommon:breadcrumbs LC_head_subbox + .$content + .'
' +} + +############################################## +=pod + +=item * &CSTR_pageheader() + +Inputs: ./. + +Returns: HTML div with CSTR path and recent box + To be included on Construction Space pages + +=cut + +sub CSTR_pageheader { + # this is for resources; directories have customtitle, and crumbs + # and select recent are created in lonpubdir.pm + my ($uname,$thisdisfn)= + ($env{'request.filename'} =~ m|^/home/([^/]+)/public_html/(.*)|); + my $formaction='/priv/'.$uname.'/'.$thisdisfn; + $formaction=~s/\/+/\//g; + + my $parentpath = ''; + my $lastitem = ''; + if ($thisdisfn =~ m-(.+/)([^/]*)$-) { + $parentpath = $1; + $lastitem = $2; + } else { + $lastitem = $thisdisfn; + } + return + '
' + .&Apache::loncommon::help_open_menu('','',3,'Authoring') #FIXME: Broken? Where is it? + .''.&mt('Construction Space:').' ' + .'
' #FIXME lonpubdir: target="_parent" + .&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv','','+1',1)."$lastitem
" + #FIXME lonpubdir: &Apache::lonhtmlcommon::crumbs($uname.$thisdisfn.'/','_top','/priv','','+1',1)."
" + .&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()') + .'
' + .&Apache::lonmenu::constspaceform() + .'
'; +} + ############################################### ############################################### @@ -4109,17 +4302,11 @@ Inputs: =item * $forcereg, if page should register as content page (relevant for text interface only) -=item * $customtitle, alternate text to use instead of $title - in the title box that appears, this text - is not auto translated like the $title is - -=item * $notopbar, if true, keep the 'what is this' info but remove the - navigational links +=item * $no_nav_bar, if true, keep the 'what is this' info but remove the + navigational links =item * $bgcolor, used to override the bgcolor on a webpage to a specific value -=item * $notitle, if true keep the nav controls, but remove the title bar - =item * $no_inline_link, if true and in remote mode, don't show the 'Switch To Inline Menu' link @@ -4139,8 +4326,8 @@ other decorations will be returned. =cut sub bodytag { - my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,$customtitle, - $notopbar,$bgcolor,$notitle,$no_inline_link,$args)=@_; + my ($title,$function,$addentries,$bodyonly,$domain,$forcereg, + $no_nav_bar,$bgcolor,$no_inline_link,$args)=@_; if (!$args->{'no_auto_mt_title'}) { $title = &mt($title); } @@ -4149,7 +4336,7 @@ sub bodytag { my $font = &designparm($function.'.font',$domain); my $pgbg = $bgcolor || &designparm($function.'.pgbg',$domain); - my %design = ( 'style' => 'margin-top: 0px', + my %design = ( 'style' => 'margin-top: 0', 'bgcolor' => $pgbg, 'text' => $font, 'alink' => &designparm($function.'.alink',$domain), @@ -4185,15 +4372,7 @@ sub bodytag { if ($bodyonly) { return $bodytag; - } elsif ($env{'browser.interface'} eq 'textual') { -# Accessibility - - $bodytag.=&Apache::lonmenu::menubuttons($forcereg,$forcereg); - if (!$notitle) { - $bodytag.='

LON-CAPA: '.$title.'

'; - } - return $bodytag; - } + } my $name = &plainname($env{'user.name'},$env{'user.domain'}); if ($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public') { @@ -4217,10 +4396,7 @@ $realm  ENDROLE - my $titleinfo = ''.$title.''; - if ($customtitle) { - $titleinfo = $customtitle; - } + my $titleinfo = '

'.$title.'

'; # # Extra info if you are the DC my $dc_info = ''; @@ -4239,43 +4415,19 @@ ENDROLE $forcereg=1; } - if (!$customtitle && $env{'request.state'} eq 'construct') { - # this is for resources; directories have customtitle, and crumbs - # and select recent are created in lonpubdir.pm - my ($uname,$thisdisfn)= - ($env{'request.filename'} =~ m|^/home/([^/]+)/public_html/(.*)|); - my $formaction='/priv/'.$uname.'/'.$thisdisfn; - $formaction=~s/\/+/\//g; - - my $parentpath = ''; - my $lastitem = ''; - if ($thisdisfn =~ m-(.+/)([^/]*)$-) { - $parentpath = $1; - $lastitem = $2; - } else { - $lastitem = $thisdisfn; - } - $titleinfo = - &Apache::loncommon::help_open_menu('','',3,'Authoring') - .''.&mt('Construction Space').': ' - .'
' - .&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv','','+1',1)."$lastitem
" - .&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()') - .'
' - .&Apache::lonmenu::constspaceform(); - } - - my $titletable; - if (!$notitle) { - $titletable = - ''. - "".$roleinfo. - '
$titleinfo $dc_info
'; - } - if ($notopbar) { + if ($env{'request.state'} eq 'construct') { + $titleinfo = &CSTR_pageheader(); #FIXME: Will be removed once all scripts have their own calls + } + + my $titletable = '' + ."".$roleinfo + .'
$titleinfo $dc_info
'; + + if ($no_nav_bar) { $bodytag .= $titletable; } else { + $bodytag .= qq|
$name ($role)
+ $realm $dc_info
|; if ($env{'request.state'} eq 'construct') { $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg, $titletable); @@ -4301,14 +4453,11 @@ ENDROLE my $menu= ($no_inline_link?'' :'
'.&mt('Switch to Inline Menu Mode').''); # - if ($notitle) { - return $bodytag; - } return(< -$upperleft - $messages  +$upperleft + $messages  $titleinfo $dc_info $menu $roleinfo @@ -4356,15 +4505,6 @@ sub make_attr_string { $attr_ref->{'style'}=$style.'; font-size: x-large;'; } - if ($env{'browser.blackwhite'} eq 'on') { - delete($attr_ref->{'font'}); - delete($attr_ref->{'link'}); - delete($attr_ref->{'alink'}); - delete($attr_ref->{'vlink'}); - delete($attr_ref->{'bgcolor'}); - delete($attr_ref->{'background'}); - } - my $attr_string; foreach my $attr (keys(%$attr_ref)) { $attr_string .= " $attr=\"".$attr_ref->{$attr}.'" '; @@ -4425,6 +4565,8 @@ sub standard_css { my $img = &designparm($function.'.img', $domain); my $tabbg = &designparm($function.'.tabbg', $domain); my $font = &designparm($function.'.font', $domain); + my $fontmenu = &designparm($function.'.fontmenu', $domain); +#second colour for later usage my $sidebg = &designparm($function.'.sidebg',$domain); my $pgbg_or_bgcolor = $bgcolor || @@ -4458,54 +4600,61 @@ sub standard_css { my $lg_border_color = '#C8C8C8'; my $border = ($env{'browser.type'} eq 'explorer' || - $env{'browser.type'} eq 'safari' ) ? '0px 2px 0px 2px' - : '0px 3px 0px 4px'; + $env{'browser.type'} eq 'safari' ) ? '0 2px 0 2px' + : '0 3px 0 4px'; return < td { background-color: #CCCCCC; font-weight: bold; text-align: left; } -table.LC_data_table tr.LC_odd_row > td, -table.LC_pick_box tr > td.LC_odd_row, -table.LC_aboutme_port tr td { + +table.LC_data_table tr.LC_odd_row > td, +table.LC_pick_box tr > td.LC_odd_row { background-color: $data_table_light; padding: 2px; } + table.LC_data_table tr.LC_even_row > td, -table.LC_pick_box tr > td.LC_even_row, -table.LC_aboutme_port tr.LC_even_row td { +table.LC_pick_box tr > td.LC_even_row { background-color: $data_table_dark; padding: 2px; } + table.LC_data_table tr.LC_data_table_highlight td { background-color: $data_table_darker; } + table.LC_data_table tr td.LC_leftcol_header { background-color: $data_table_head; font-weight: bold; } + table.LC_data_table tr.LC_empty_row td, table.LC_nested tr.LC_empty_row td { background-color: #FFFFFF; @@ -4787,15 +4996,19 @@ table.LC_nested tr.LC_empty_row td { text-align: center; padding: 8px; } + table.LC_nested tr.LC_empty_row td { padding: 4ex } + table.LC_nested_outer tr th { font-weight: bold; + color:$fontmenu; background-color: $data_table_head; font-size: small; border-bottom: 1px solid #000000; } + table.LC_nested_outer tr td.LC_subheader { background-color: $data_table_head; font-weight: bold; @@ -4803,20 +5016,24 @@ table.LC_nested_outer tr td.LC_subheader border-bottom: 1px solid #000000; text-align: right; } + table.LC_nested tr.LC_info_row td { background-color: #CCCCCC; font-weight: bold; font-size: small; text-align: center; } + table.LC_nested tr.LC_info_row td.LC_left_item, table.LC_nested_outer tr th.LC_left_item { text-align: left; } + table.LC_nested td { background-color: #FFFFFF; font-size: small; } + table.LC_nested_outer tr th.LC_right_item, table.LC_nested tr.LC_info_row td.LC_right_item, table.LC_nested tr.LC_odd_row td.LC_right_item, @@ -4845,16 +5062,20 @@ table.LC_calendar { border: 1px solid #000000; border-collapse: collapse; } + table.LC_calendar_pickdate { font-size: xx-small; } + table.LC_calendar tr td { border: 1px solid #000000; vertical-align: top; } + table.LC_calendar tr td.LC_calendar_day_empty { background-color: $data_table_dark; } + table.LC_calendar tr td.LC_calendar_day_current { background-color: $data_table_highlight; } @@ -4862,47 +5083,60 @@ table.LC_calendar tr td.LC_calendar_day_ table.LC_mail_list tr.LC_mail_new { background-color: $mail_new; } + 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; } + table.LC_mail_list tr.LC_mail_read:hover { background-color: $mail_read_hover; } + table.LC_mail_list tr.LC_mail_replied { background-color: $mail_replied; } + table.LC_mail_list tr.LC_mail_replied:hover { background-color: $mail_replied_hover; } + table.LC_mail_list tr.LC_mail_other { background-color: $mail_other; } + table.LC_mail_list tr.LC_mail_other:hover { background-color: $mail_other_hover; } -table.LC_mail_list tr.LC_mail_even { -} -table.LC_mail_list tr.LC_mail_odd { -} table.LC_data_table tr > td.LC_browser_file, table.LC_data_table tr > td.LC_browser_file_published { background: #CCFF88; } + table.LC_data_table tr > td.LC_browser_file_locked, table.LC_data_table tr > td.LC_browser_file_unpublished { background: #FFAA99; } + table.LC_data_table tr > td.LC_browser_file_obsolete { background: #AAAAAA; } + table.LC_data_table tr > td.LC_browser_file_modified, table.LC_data_table tr > td.LC_browser_file_metamodified { background: #FFFF77; } + table.LC_data_table tr.LC_browser_folder > td { background: #CCCCFF; } @@ -4910,18 +5144,23 @@ table.LC_data_table tr.LC_browser_folder table.LC_data_table tr > td.LC_roles_is { /* background: #77FF77; */ } + table.LC_data_table tr > td.LC_roles_future { background: #FFFF77; } + table.LC_data_table tr > td.LC_roles_will { background: #FFAA77; } + table.LC_data_table tr > td.LC_roles_expired { background: #FF7777; } + table.LC_data_table tr > td.LC_roles_will_not { background: #AAFF77; } + table.LC_data_table tr > td.LC_roles_selected { background: #11CC55; } @@ -4933,60 +5172,71 @@ span.LC_current_location { span.LC_parm_menu_item { font-size: larger; - font-family: $sans; } + span.LC_parm_scope_all { color: red; } + span.LC_parm_scope_folder { color: green; } + span.LC_parm_scope_resource { color: orange; } + span.LC_parm_part { color: blue; } + span.LC_parm_folder, span.LC_parm_symb { font-size: x-small; font-family: $mono; color: #AAAAAA; } -td.LC_parm_overview_level_menu, td.LC_parm_overview_map_menu, -td.LC_parm_overview_parm_selectors, td.LC_parm_overview_parm_restrictions { +td.LC_parm_overview_level_menu, +td.LC_parm_overview_map_menu, +td.LC_parm_overview_parm_selectors, +td.LC_parm_overview_restrictions { border: 1px solid black; border-collapse: collapse; } + table.LC_parm_overview_restrictions td { border-width: 1px 4px 1px 4px; border-style: solid; border-color: $pgbg; text-align: center; } + table.LC_parm_overview_restrictions th { background: $tabbg; border-width: 1px 4px 1px 4px; border-style: solid; border-color: $pgbg; } + table#LC_helpmenu { - border: 0px; + border: none; height: 55px; - border-spacing: 0px; + border-spacing: 0; } table#LC_helpmenu fieldset legend { font-size: larger; font-weight: bold; } + table#LC_helpmenu_links { width: 100%; border: 1px solid black; background: $pgbg; - padding: 0px; + padding: 0; border-spacing: 1px; } + table#LC_helpmenu_links tr td { padding: 1px; background: $tabbg; @@ -4994,11 +5244,13 @@ table#LC_helpmenu_links tr td { font-weight: bold; } -table#LC_helpmenu_links a:link, table#LC_helpmenu_links a:visited, +table#LC_helpmenu_links a:link, +table#LC_helpmenu_links a:visited, table#LC_helpmenu_links a:active { text-decoration: none; color: $font; } + table#LC_helpmenu_links a:hover { text-decoration: underline; color: $vlink; @@ -5008,27 +5260,33 @@ table#LC_helpmenu_links a:hover { border: 1px solid #339933; margin: -1px; } + .LC_chrt_popup_up { border: 1px solid yellow; margin: -1px; } + .LC_chrt_popup { border: 1px solid #8888FF; background: #CCCCFF; } + table.LC_pick_box { border-collapse: separate; background: white; border: 1px solid black; border-spacing: 1px; } + table.LC_pick_box td.LC_pick_box_title { background: $tabbg; font-weight: bold; text-align: right; + vertical-align: top; width: 184px; padding: 8px; } + table.LC_pick_box td.LC_selfenroll_pick_box_title { background: $tabbg; font-weight: bold; @@ -5041,28 +5299,34 @@ table.LC_pick_box td.LC_pick_box_value { text-align: left; padding: 8px; } + table.LC_pick_box td.LC_pick_box_select { text-align: left; padding: 8px; } + table.LC_pick_box td.LC_pick_box_separator { - padding: 0px; + padding: 0; height: 1px; background: black; } + table.LC_pick_box td.LC_pick_box_submit { text-align: right; } + table.LC_pick_box td.LC_evenrow_value { text-align: left; padding: 8px; background-color: $data_table_light; } + table.LC_pick_box td.LC_oddrow_value { text-align: left; padding: 8px; background-color: $data_table_light; } + table.LC_helpform_receipt { width: 620px; border-collapse: separate; @@ -5070,6 +5334,7 @@ table.LC_helpform_receipt { border: 1px solid black; border-spacing: 1px; } + table.LC_helpform_receipt td.LC_pick_box_title { background: $tabbg; font-weight: bold; @@ -5077,51 +5342,61 @@ table.LC_helpform_receipt td.LC_pick_box width: 184px; padding: 8px; } + table.LC_helpform_receipt td.LC_evenrow_value { text-align: left; padding: 8px; background-color: $data_table_light; } + table.LC_helpform_receipt td.LC_oddrow_value { text-align: left; padding: 8px; background-color: $data_table_light; } + table.LC_helpform_receipt td.LC_pick_box_separator { - padding: 0px; + padding: 0; height: 1px; background: black; } + span.LC_helpform_receipt_cat { font-weight: bold; } + table.LC_group_priv_box { background: white; border: 1px solid black; border-spacing: 1px; } + table.LC_group_priv_box td.LC_pick_box_title { background: $tabbg; font-weight: bold; text-align: right; width: 184px; } + table.LC_group_priv_box td.LC_groups_fixed { background: $data_table_light; text-align: center; } + table.LC_group_priv_box td.LC_groups_optional { background: $data_table_dark; text-align: center; } + table.LC_group_priv_box td.LC_groups_functionality { background: $data_table_darker; text-align: center; font-weight: bold; } + table.LC_group_priv td { text-align: left; - padding: 0px; + padding: 0; } table.LC_notify_front_page { @@ -5129,50 +5404,68 @@ table.LC_notify_front_page { border: 1px solid black; padding: 8px; } + table.LC_notify_front_page td { padding: 8px; } + .LC_navbuttons { margin: 2ex 0ex 2ex 0ex; } + .LC_topic_bar { - font-family: $sans; font-weight: bold; width: 100%; background: $tabbg; vertical-align: middle; margin: 2ex 0ex 2ex 0ex; + padding: 3px; } + .LC_topic_bar span { vertical-align: middle; } + .LC_topic_bar img { vertical-align: bottom; } + table.LC_course_group_status { margin: 20px; } + table.LC_status_selector td { vertical-align: top; text-align: center; padding: 4px; } -table.LC_descriptive_input td.LC_description { - vertical-align: top; - text-align: right; - font-weight: bold; -} + div.LC_feedback_link { clear: both; - background: white; - width: 100%; + background: $sidebg; + width: 100%; + padding-bottom: 10px; + border: 1px $tabbg solid; + height: 22px; + line-height: 22px; + padding-top: 5px; +} + +div.LC_feedback_link img { + height: 22px; } + +div.LC_feedback_link a{ + text-decoration: none; +} + span.LC_feedback_link { - background: $feedback_link_bg; + //background: $feedback_link_bg; font-size: larger; } + span.LC_message_link { - background: $feedback_link_bg; + //background: $feedback_link_bg; font-size: larger; position: absolute; right: 1em; @@ -5189,33 +5482,43 @@ table.LC_prior_tries td { } .LC_answer_correct { - background: #AAFFAA; - color: black; + background: lightgreen; + color: darkgreen; + padding: 6px; } + .LC_answer_charged_try { - background: #FFAAAA ! important; - color: black; + background: #FFAAAA; + color: darkred; + padding: 6px; } -.LC_answer_not_charged_try, + +.LC_answer_not_charged_try, .LC_answer_no_grade, .LC_answer_late { - background: #FFFFAA; + background: lightyellow; color: black; + padding: 6px; } + .LC_answer_previous { - background: #AAAAFF; - color: black; + background: lightblue; + color: darkblue; + padding: 6px; } + .LC_answer_no_message { background: #FFFFFF; color: black; + padding: 6px; } + .LC_answer_unknown { background: orange; color: black; + padding: 6px; } - span.LC_prior_numerical, span.LC_prior_string, span.LC_prior_custom, @@ -5234,15 +5537,19 @@ table.LC_prior_option { width: 100%; border-collapse: collapse; } -table.LC_prior_rank, table.LC_prior_match { + +table.LC_prior_rank, +table.LC_prior_match { border-collapse: collapse; } + table.LC_prior_option tr td, table.LC_prior_rank tr td, table.LC_prior_match tr td { border: 1px solid #000000; } +td.LC_nobreak, span.LC_nobreak { white-space: nowrap; } @@ -5258,7 +5565,7 @@ span.LC_cusr_subheading { table.LC_docs_documents { background: #BBBBBB; - border-width: 0px; + border-width: 0; border-collapse: collapse; } @@ -5268,7 +5575,7 @@ table.LC_docs_documents td.LC_docs_docum } .LC_docs_entry_move { - border: 0px; + border: none; border-collapse: collapse; } @@ -5281,15 +5588,19 @@ table.LC_docs_documents td.LC_docs_docum background: #DDDDDD; font-size: x-small; } + .LC_docs_copy { color: #000099; } + .LC_docs_cut { color: #550044; } + .LC_docs_rename { color: #009900; } + .LC_docs_remove { color: #990000; } @@ -5303,6 +5614,7 @@ table.LC_docs_documents td.LC_docs_docum .LC_docs_editor td.LC_docs_entry_icon { background: #FFFFBB; } + .LC_docs_editor td.LC_docs_entry_parameter { background: #BBBBFF; font-size: x-small; @@ -5319,12 +5631,13 @@ table.LC_docs_adddocs th { table.LC_sty_begin { background: #BBFFBB; } + table.LC_sty_end { background: #FFBBBB; } table.LC_double_column { - border-width: 0px; + border-width: 0; border-collapse: collapse; width: 100%; padding: 2px; @@ -5339,7 +5652,7 @@ table.LC_double_column tr td.LC_left_col table.LC_double_column tr td.LC_right_col { top: 2px; - right: 2px; + right: 2px; width: 47%; vertical-align: top; } @@ -5363,17 +5676,18 @@ div.LC_clear_float_footer { clear: both; } - div.LC_grade_show_user { margin-top: 20px; border: 1px solid black; } + div.LC_grade_user_name { background: #DDDDEE; border-bottom: 1px solid black; font-weight: bold; font-size: large; } + div.LC_grade_show_user_odd_row div.LC_grade_user_name { background: #DDEEDD; } @@ -5387,6 +5701,7 @@ div.LC_grade_assign { width: 99%; background: #FFFFFF; } + div.LC_grade_show_problem_header, div.LC_grade_submissions_header, div.LC_grade_message_center_header, @@ -5394,6 +5709,7 @@ div.LC_grade_assign_header { font-weight: bold; font-size: large; } + div.LC_grade_show_problem_problem, div.LC_grade_submissions_body, div.LC_grade_message_center_body, @@ -5402,6 +5718,7 @@ div.LC_grade_assign_body { width: 99%; background: #FFFFFF; } + span.LC_grade_check_note { font-weight: normal; font-size: medium; @@ -5413,16 +5730,19 @@ span.LC_grade_check_note { table.LC_scantron_action { width: 100%; } + table.LC_scantron_action tr th { font-weight:bold; font-style:normal; } -.LC_edit_problem_header, + +.LC_edit_problem_header, div.LC_edit_problem_footer { font-weight: normal; font-size: medium; margin: 2px; } + div.LC_edit_problem_header, div.LC_edit_problem_header div, div.LC_edit_problem_footer, @@ -5431,17 +5751,14 @@ div.LC_edit_problem_editxml_header, div.LC_edit_problem_editxml_header div { margin-top: 5px; } -div.LC_edit_problem_header_edit_row { - background: $tabbg; - padding: 3px; - margin-bottom: 5px; -} + div.LC_edit_problem_header_title { font-weight: bold; font-size: larger; background: $tabbg; padding: 3px; } + table.LC_edit_problem_header_title { font-size: larger; font-weight: bold; @@ -5449,46 +5766,47 @@ table.LC_edit_problem_header_title { border-color: $pgbg; border-style: solid; border-width: $border; - background: $tabbg; border-collapse: collapse; - padding: 0px + padding: 0; } div.LC_edit_problem_discards { float: left; padding-bottom: 5px; } + div.LC_edit_problem_saves { float: right; padding-bottom: 5px; } + hr.LC_edit_problem_divide { clear: both; color: $tabbg; background-color: $tabbg; height: 3px; - border: 0px; + border: none; } + img.stift{ - border-width:0; - vertical-align:middle; + border-width: 0; + vertical-align: middle; } table#LC_mainmenu{ margin-top:10px; width:80%; - } table#LC_mainmenu td.LC_mainmenu_col_fieldset{ vertical-align: top; width: 45%; } + .LC_mainmenu_fieldset_category { color: $font; background: $pgbg; - font-family: $sans; font-size: small; font-weight: bold; } @@ -5510,73 +5828,90 @@ 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{ +ul.LC_TabContent li:hover a { color:#BF2317; text-decoration:none; } -h1 { - padding:5px 10px 5px 20px; +h1 { + padding: 0; line-height:130%; } -h2,h3,h4,h5,h6 -{ - margin:5px 0px 5px 0px; - padding:0px; +h2,h3,h4,h5,h6 { + margin: 5px 0 5px 0; + padding: 0; line-height:130%; } -.LC_hcell{ + +.LC_hcell { padding:3px 15px 3px 15px; - margin:0px; + margin: 0; background-color:$tabbg; - border-bottom:solid 1px $lg_border_color; -} -.LC_noBorder { - border:0px; + color:$fontmenu; + border-bottom:solid 1px $lg_border_color; } -.LC_bgLightGrey{ - background:URL(/adm/lonIcons/lightGreyBG.png) repeat-x left top; -} -.LC_bgLightGreyYellow { - background-color:#EFECE0; +.LC_ContentBoxSpecial > .LC_hcell { + margin: 0 -10px 10px -10px; } -/* Main Header with discription of Person, Course, etc. */ -.LC_HeadRight { - text-align: right; - float: right; - margin: 0px; - padding: 0px; - right:0; - position:absolute; - overflow:hidden; +.LC_noBorder { + border: 0; } -p, .LC_ContentBox { - padding: 10px; +/* Main Header with discription of Person, Course, etc. */ + +.LC_Right { + float: right; + margin: 0; + padding: 0; } + .LC_FormSectionClearButton input { - - border:0px; + background-color:transparent; + border: none; cursor:pointer; text-decoration:underline; } +.LC_help_open_topic { + color: #FFFFFF; + background-color: #EEEEFF; + margin: 1px; + padding: 4px; + border: 1px solid #000033; + white-space: nowrap; +/* vertical-align: middle; */ +} dl,ul,div,fieldset { - margin: 10px 10px 10px 0px; - overflow:hidden; + margin: 10px 10px 10px 0; +/* overflow: hidden; */ } + +#LC_nav_bar { + float: left; + margin: 0; +} + +#LC_nav_bar em{ + font-weight: bold; + font-style: normal; +} + +ol.LC_smallMenu { + float: right; +} + ol.LC_smallMenu, ol#LC_PathBreadcrumbs { - margin: 0px; + margin: 0; } ol.LC_smallMenu li { display: inline; - padding: 5px 5px 0px 10px; + padding: 5px 5px 0 10px; vertical-align: top; } @@ -5590,110 +5925,134 @@ ol.LC_smallMenu a { text-decoration: none; } -ol#LC_TabMainMenuContent { +ul#LC_TabMainMenuContent { + clear: both; + color: $fontmenu; + background: $tabbg; + list-style: none; + padding: 0; + margin: 0; + float:left; + width: 100%; +} + +ul#LC_TabMainMenuContent li { + float: left; + font-weight: bold; + line-height: 1.8em; + padding: 0 0.8em; + border-right: 1px solid black; + display: inline; + vertical-align: middle; +} + +ul.LC_TabContent , +ul.LC_TabContentBigger { display:block; list-style:none; - margin: 0px 0px 10px 0px; - padding: 0px; + margin: 0; + padding: 0; } -ol#LC_TabMainMenuContent li { +ul.LC_TabContent li, +ul.LC_TabContentBigger li { display: inline; - vertical-align: bottom; - border-bottom: solid 1px RGB(175, 175, 175); - border-right: solid 1px RGB(175, 175, 175); - padding: 5px 10px 5px 10px; - margin-right:3px; - line-height: 140%; - font-weight: bold; + border-right: solid 1px $lg_border_color; + float:left; + line-height:140%; white-space:nowrap; - background: url(/adm/lonIcons/lightGreyBG.png) repeat-x left top; } -ol#LC_TabMainMenuContent li a{ - color: RGB(47, 47, 47); +ul#LC_TabMainMenuContent li a { + color: $fontmenu; text-decoration: none; } + ul.LC_TabContent { - margin:0px; - padding:0px; - display:block; - list-style:none; - min-height:1.5em; + min-height:1.6em; } -ul.LC_TabContent li{ - display:inline; - vertical-align:top; + +ul.LC_TabContent li { + vertical-align:middle; + padding: 0 10px 0 10px; + background-color:$tabbg; 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{ + +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; + padding-right: 16px; } ul.LC_TabContent li:hover, ul.LC_TabContent li.active { - background: url(/adm/lonIcons/lightGreyBG.png) repeat-x right bottom; - color:#BF2317; - text-decoration:none; + background:#FFFFFF url(/adm/lonIcons/open.gif) no-repeat scroll right center; + border-bottom:solid 1px #FFFFFF; + padding-right: 16px; } -.LC_hideThis -{ - display:none; - visibility:hidden; +ul.LC_TabContentBigger li { + vertical-align:bottom; + border-top:solid 1px $lg_border_color; + border-left:solid 1px $lg_border_color; + padding:5px 10px 5px 10px; + margin-left:2px; + background:url(/adm/lonIcons/lightGreyBG.png) repeat-x left top; } -ol#LC_MenuBreadcrumbs, ol#LC_PathBreadcrumbs { - border-top: solid 1px RGB(255, 255, 255); - height: 20px; - line-height: 20px; - vertical-align: bottom; - margin: 0px 0px 30px 0px; +ul.LC_TabContentBigger li:hover, +ul.LC_TabContentBigger li.active { + background:url(/adm/lonIcons/lightGreyBG.png) repeat-x right bottom; +} + +ul.LC_TabContentBigger li, +ul.LC_TabContentBigger li a { + font-size:110%; + font-weight:bold; +} + +ol#LC_MenuBreadcrumbs, +ol#LC_PathBreadcrumbs, +ul#LC_CourseBreadcrumbs { padding-left: 10px; + margin: 0; list-style-position: inside; - background: url(/adm/lonIcons/lightGreyBG.png) repeat-x left top; } -ol#LC_MenuBreadcrumbs li, ol#LC_PathBreadcrumbs li { - background: url(/adm/lonIcons/arrow_white.png) no-repeat left center; +ol#LC_MenuBreadcrumbs li, +ol#LC_PathBreadcrumbs li, +ul#LC_CourseBreadcrumbs li { display: inline; - padding: 0px 0px 0px 10px; - vertical-align: bottom; + padding: 0 0 0 10px; overflow:hidden; } -ol#LC_MenuBreadcrumbs li a { +ol#LC_MenuBreadcrumbs li a, +ul#LC_CourseBreadcrumbs li a { text-decoration: none; font-size:90%; } -ol#LC_PathBreadcrumbs li a{ + +ol#LC_PathBreadcrumbs li a { text-decoration:none; font-size:100%; font-weight:bold; } -.LC_ContentBoxSpecial -{ - border: solid 1px $lg_border_color; + +.LC_ContentBoxSpecial { + border: solid 1px $lg_border_color; + padding: 0 10px 10px 10px; } -.LC_PopUp -{ - padding:10px; - border-left:solid 1px $lg_border_color; - border-top:solid 1px $lg_border_color; - border-bottom:outset 1px $lg_border_color; - border-right:outset 1px $lg_border_color; - display:none; - position:absolute; - right:0; - background-color:white; - z-index:5; + +.LC_AboutMe_Image { + float:left; + margin-right:10px; +} + +.LC_Clear_AboutMe_Image { + clear:left; } dl.LC_ListStyleClean dt { @@ -5708,14 +6067,13 @@ dl.LC_ListStyleClean dd { .LC_ListStyleClean, .LC_ListStyleSimple, .LC_ListStyleNormal, -.LC_ListStyleNormal_Border, -.LC_ListStyleSpecial - { +.LC_ListStyle_Border, +.LC_ListStyleSpecial { /*display:block; */ list-style-position: inside; list-style-type: none; overflow: hidden; - padding: 0px; + padding: 0; } .LC_ListStyleSimple li, @@ -5723,21 +6081,20 @@ dl.LC_ListStyleClean dd { .LC_ListStyleNormal li, .LC_ListStyleNormal dd, .LC_ListStyleSpecial li, -.LC_ListStyleSpecial dd - { - margin: 0px; +.LC_ListStyleSpecial dd { + margin: 0; padding: 5px 5px 5px 10px; clear: both; } .LC_ListStyleClean li, .LC_ListStyleClean dd { - padding-top: 0px; - padding-bottom: 0px; + padding-top: 0; + padding-bottom: 0; } .LC_ListStyleSimple dd, -.LC_ListStyleSimple li{ +.LC_ListStyleSimple li { border-bottom: solid 1px $lg_border_color; } @@ -5751,13 +6108,14 @@ dl.LC_ListStyleClean dd { table.LC_SimpleTable { margin:5px; border:solid 1px $lg_border_color; - } +} table.LC_SimpleTable tr { - padding:0px; + padding: 0; border:solid 1px $lg_border_color; } -table.LC_SimpleTable thead{ + +table.LC_SimpleTable thead { background:rgb(220,220,220); } @@ -5765,46 +6123,26 @@ div.LC_columnSection { display: block; clear: both; overflow: hidden; - margin:0px; + margin: 0; } div.LC_columnSection>* { float: left; - margin: 10px 20px 10px 0px; - overflow:hidden; -} -div.LC_columnSection > .LC_ContentBox, -div.LC_columnSection > .LC_ContentBoxSpecial - { - width: 400px; -} - -.ContentBoxSpecialTemplate -{ - border: solid 1px $lg_border_color; -} -.ContentBoxTemplate { - padding:10px; -} - -div.LC_columnSection > .ContentBoxTemplate, -div.LC_columnSection > .ContentBoxSpecialTemplate - { - width: 600px; - + margin: 10px 20px 10px 0; + overflow:hidden; } -.clear{ +.clear { clear: both; - line-height: 0px; - font-size: 0px; - height: 0px; + line-height: 0; + font-size: 0; + height: 0; } .LC_loginpage_container { text-align:left; margin : 0 auto; - width:65%; + width:90%; padding: 10px; height: auto; background-color:#FFFFFF; @@ -5815,48 +6153,145 @@ div.LC_columnSection > .ContentBoxSpecia .LC_loginpage_loginContainer { float:left; width: 182px; + padding: 2px; border:1px solid #CCCCCC; background-color:$loginbg; } -.LC_loginpage_loginContainer h2{ - margin-top:0; +.LC_loginpage_loginContainer h2 { + margin-top: 0; display:block; background:$bgcol; color:$textcol; padding-left:5px; } + .LC_loginpage_loginInfo { - margin-left:20px; float:left; - width:30%; + width:182px; border:1px solid #CCCCCC; - padding:10px; -} - -.LC_loginpage_loginDomain { - margin-right:20px; - width:20%; - float:left; - padding:10px; + padding:2px; } .LC_loginpage_space { - clear:both; - margin-bottom:20px; + clear: both; + margin-bottom: 20px; border-bottom: 1px solid #CCCCCC; } -.LC_loginpage_fieldset{ - border: 1px solid #CCCCCC; - margin: 0 auto; +.LC_loginpage_floatLeft { + float: left; + width: 200px; + margin: 0; } -.LC_loginpage_legend{ - padding: 2px; - margin: 0px; - font-size:14px; - font-weight:bold; +table em { + font-weight: bold; + font-style: normal; +} + +table.LC_tableBrowseRes, +table.LC_tableOfContent { + border:none; + border-spacing: 1; + padding: 3px; + background-color: #FFFFFF; + font-size: 90%; +} + +table.LC_tableOfContent{ + border-collapse: collapse; +} + +table.LC_tableBrowseRes a, +table.LC_tableOfContent a { + background-color: transparent; + 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; + vertical-align: text-bottom; + margin-right: 0.3em; +} + +a#LC_content_toolbar_firsthomework { + background-image:url(/res/adm/pages/open-first-problem.gif); +} + +a#LC_content_toolbar_launchnav { + background-image:url(/res/adm/pages/start-navigation.gif); +} + +a#LC_content_toolbar_closenav { + background-image:url(/res/adm/pages/close-navigation.gif); +} + +a#LC_content_toolbar_everything { + background-image:url(/res/adm/pages/show-all.gif); +} + +a#LC_content_toolbar_uncompleted { + background-image:url(/res/adm/pages/show-incomplete-problems.gif); +} + +#LC_content_toolbar_clearbubbles { + background-image:url(/res/adm/pages/mark-discussionentries-read.gif); +} + +a#LC_content_toolbar_changefolder { + background : url(/res/adm/pages/close-all-folders.gif) top center ; +} + +a#LC_content_toolbar_changefolder_toggled { + background-image:url(/res/adm/pages/open-all-folders.gif); +} + +ul#LC_toolbar li a:hover { + background-position: bottom center; +} + +ul#LC_toolbar { + padding: 0; + margin: 2px; + list-style:none; + position:relative; + background-color:white; +} + +ul#LC_toolbar li { + border:1px solid white; + padding: 0; + margin: 0; + float: left; + display:inline; + vertical-align:middle; +} + + +a.LC_toolbarItem { + display:block; + padding: 0; + margin: 0; + height: 32px; + width: 32px; + color:white; + border: none; + background-repeat:no-repeat; + background-color:transparent; +} + +ul.LC_functionslist li { + float: left; + white-space: nowrap; + height: 35px; /* at least as high as heighest list item */ + margin: 0 15px 15px 10px; } @@ -6049,7 +6484,7 @@ $args - additional optional args support only_body -> is true will set &bodytag() onlybodytag arg on - no_nav_bar -> is true will set &bodytag() notopbar arg on + no_nav_bar -> is true will set &bodytag() no_nav_bar arg on add_entries -> additional attributes to add to the domain -> force to color decorate a page for a specific domain @@ -6063,12 +6498,8 @@ $args - additional optional args support a html attribute force_register -> if is true will turn on the &bodytag() $forcereg arg - body_title -> alternate text to use instead of $title - in the title box that appears, this text - is not auto translated like the $title is frameset -> if true will start with a rather than - no_title -> if true the title bar won't be shown skip_phases -> hash ref of head -> skip the generation body -> skip all generation @@ -6110,16 +6541,15 @@ sub start_page { my $attr_string = &make_attr_string($args->{'force_register'}, $args->{'add_entries'}); $result .= "\n\n"; - } else { - $result .= - &bodytag($title, - $args->{'function'}, $args->{'add_entries'}, - $args->{'only_body'}, $args->{'domain'}, - $args->{'force_register'}, $args->{'body_title'}, - $args->{'no_nav_bar'}, $args->{'bgcolor'}, - $args->{'no_title'}, $args->{'no_inline_link'}, - $args); - } + } else { + $result .= + &bodytag($title, + $args->{'function'}, $args->{'add_entries'}, + $args->{'only_body'}, $args->{'domain'}, + $args->{'force_register'}, $args->{'no_nav_bar'}, + $args->{'bgcolor'}, $args->{'no_inline_link'}, + $args); + } } if ($args->{'js_ready'}) { @@ -6129,16 +6559,31 @@ sub start_page { $result = &html_encode($result); } - 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(); - } + # Preparation for new and consistent functionlist at top of screen + # if ($args->{'functionlist'}) { + # $result .= &build_functionlist(); + #} + + # Don't add anything more if only_body wanted + return $result if $args->{'only_body'}; + + #Breadcrumbs + if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) { + &Apache::lonhtmlcommon::clear_breadcrumbs(); + #if any br links exists, add them to the breadcrumbs + if (exists($args->{'bread_crumbs'}) and ref($args->{'bread_crumbs'}) eq 'ARRAY') { + foreach my $crumb (@{$args->{'bread_crumbs'}}){ + &Apache::lonhtmlcommon::add_breadcrumb($crumb); + } + } + #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(); + } + } return $result; } @@ -6366,14 +6811,17 @@ Returns either 'student','coordinator',' ############################################### sub get_users_function { - my $function = 'student'; + my $function = 'norole'; + if ($env{'request.role'}=~/^(st)/) { + $function='student'; + } if ($env{'request.role'}=~/^(cc|in|ta|ep)/) { $function='coordinator'; } if ($env{'request.role'}=~/^(su|dc|ad|li)/) { $function='admin'; } - if (($env{'request.role'}=~/^(au|ca)/) || + if (($env{'request.role'}=~/^(au|ca|aa)/) || ($ENV{'REQUEST_URI'}=~/^(\/priv|\~)/)) { $function='author'; } @@ -6384,6 +6832,38 @@ sub get_users_function { =pod +=item * &show_course() + +Used by lonmenu.pm and lonroles.pm to determine whether to use the word +'Courses' or 'Roles' in inline navigation and on screen displaying user's roles. + +Inputs: +None + +Outputs: +Scalar: 1 if 'Course' to be used, 0 otherwise. + +=cut + +############################################### +sub show_course { + my $course = !$env{'user.adv'}; + if (!$env{'user.adv'}) { + foreach my $env (keys(%env)) { + next if ($env !~ m/^user\.priv\./); + if ($env !~ m/^user\.priv\.(?:st|cm)/) { + $course = 0; + last; + } + } + } + return $course; +} + +############################################### + +=pod + =item * &check_user_status() Determines current status of supplied role for a @@ -6887,6 +7367,8 @@ If the user's status includes multiple t the largest default quota which applies to the user determines the default quota returned. +=back + =cut ############################################### @@ -6899,7 +7381,7 @@ sub default_quota { ['quotas'],$udom); if (ref($quotahash{'quotas'}) eq 'HASH') { if ($inststatus ne '') { - my @statuses = split(/:/,$inststatus); + my @statuses = map { &unescape($_); } split(/:/,$inststatus); foreach my $item (@statuses) { if (ref($quotahash{'quotas'}{'defaultquota'}) eq 'HASH') { if ($quotahash{'quotas'}{'defaultquota'}{$item} ne '') { @@ -7078,12 +7560,17 @@ sub user_picker { if ($cancreate) { $new_user_create = '

&"').'" onclick="javascript:setSearch(\'1\','.$caller.');" />

'; } else { - my $helplink = ' href="javascript:helpMenu('."'display'".')"'; + my $helplink = 'javascript:helpMenu('."'display'".')'; my %usertypetext = ( official => 'institutional', unofficial => 'non-institutional', ); - $new_user_create = '
'.&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.").' '.&mt('Contact the helpdesk for assistance.',$helplink).'

'; + $new_user_create = '

' + .&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.") + .' ' + .&mt('Please contact the [_1]helpdesk[_2] for assistance.' + ,'','') + .'


'; } } } @@ -7120,6 +7607,7 @@ ENDSCRIPT my $output = <<"END_BLOCK"; $new_user_create @@ -7365,6 +7854,7 @@ sub personal_data_fieldtitles { middlename => 'Middle Name', generation => 'Generation', gen => 'Generation', + inststatus => 'Affiliation', ); return %fieldtitles; } @@ -7434,8 +7924,57 @@ sub get_institutional_codes { =pod +=head1 Slot Helpers + +=over 4 + +=item * sorted_slots() + +Sorts an array of slot names in order of slot start time (earliest first). + +Inputs: + +=over 4 + +slotsarr - Reference to array of unsorted slot names. + +slots - Reference to hash of hash, where outer hash keys are slot names. + +=back + +Returns: + +=over 4 + +sorted - An array of slot names sorted by the start time of the slot. + =back +=back + +=cut + + +sub sorted_slots { + my ($slotsarr,$slots) = @_; + my @sorted; + if ((ref($slotsarr) eq 'ARRAY') && (ref($slots) eq 'HASH')) { + @sorted = + sort { + if (ref($slots->{$a}) && ref($slots->{$b})) { + return $slots->{$a}{'starttime'} <=> $slots->{$b}{'starttime'} + } + if (ref($slots->{$a})) { return -1;} + if (ref($slots->{$b})) { return 1;} + return 0; + } @{$slotsarr}; + } + return @sorted; +} + + +=pod + =head1 HTTP Helpers =over 4 @@ -8730,9 +9269,10 @@ sub restore_settings { =item * &build_recipient_list() -Build recipient lists for three types of e-mail: -(a) Error Reports, (b) Package Updates, (c) Help requests, generated by -lonerrorhandler.pm, CHECKRPMS and lonsupportreq.pm respectively. +Build recipient lists for four types of e-mail: +(a) Error Reports, (b) Package Updates, (c) lonstatus warnings/errors +(d) Help requests, generated by +lonerrorhandler.pm, CHECKRPMS, loncron, and lonsupportreq.pm respectively. Inputs: defmail (scalar - email address of default recipient), @@ -8756,17 +9296,21 @@ sub build_recipient_list { my %domconfig = &Apache::lonnet::get_dom('configuration',['contacts'],$defdom); if (ref($domconfig{'contacts'}) eq 'HASH') { - if (ref($domconfig{'contacts'}{$mailing}) eq 'HASH') { - my @contacts = ('adminemail','supportemail'); - foreach my $item (@contacts) { - if ($domconfig{'contacts'}{$mailing}{$item}) { - my $addr = $domconfig{'contacts'}{$item}; - if (!grep(/^\Q$addr\E$/,@recipients)) { - push(@recipients,$addr); + if (exists($domconfig{'contacts'}{$mailing})) { + if (ref($domconfig{'contacts'}{$mailing}) eq 'HASH') { + my @contacts = ('adminemail','supportemail'); + foreach my $item (@contacts) { + if ($domconfig{'contacts'}{$mailing}{$item}) { + my $addr = $domconfig{'contacts'}{$item}; + if (!grep(/^\Q$addr\E$/,@recipients)) { + push(@recipients,$addr); + } } + $otheremails = $domconfig{'contacts'}{$mailing}{'others'}; } - $otheremails = $domconfig{'contacts'}{$mailing}{'others'}; } + } elsif ($origmail ne '') { + push(@recipients,$origmail); } } elsif ($origmail ne '') { push(@recipients,$origmail); @@ -9037,7 +9581,7 @@ sub assign_categories_table { my $checked = ''; if (@currcategories > 0) { if (grep(/^\Q$item\E$/,@currcategories)) { - $checked = ' checked="checked" '; + $checked = ' checked="checked"'; } } $output .= ''. @@ -9103,7 +9647,7 @@ sub assign_category_rows { if (ref($currcategories) eq 'ARRAY') { if (@{$currcategories} > 0) { if (grep(/^\Q$item\E$/,@{$currcategories})) { - $checked = ' checked="checked" '; + $checked = ' checked="checked"'; } } } @@ -9740,7 +10284,23 @@ sub escape_url { return join('/',@urlslices).'/'.$lastitem; } -# -------------------------------------------------------- Initliaze user login +sub compare_arrays { + my ($arrayref1,$arrayref2) = @_; + my (@difference,%count); + @difference = (); + %count = (); + if ((ref($arrayref1) eq 'ARRAY') && (ref($arrayref2) eq 'ARRAY')) { + foreach my $element (@{$arrayref1}, @{$arrayref2}) { $count{$element}++; } + foreach my $element (keys(%count)) { + if ($count{$element} == 1) { + push(@difference,$element); + } + } + } + return @difference; +} + +# -------------------------------------------------------- Initialize user login sub init_user_environment { my ($r, $username, $domain, $authhost, $form, $args) = @_; my $lonids=$Apache::lonnet::perlvar{'lonIDsDir'}; @@ -9794,19 +10354,6 @@ sub init_user_environment { my ($httpbrowser,$clientbrowser,$clientversion,$clientmathml, $clientunicode,$clientos) = &decode_user_agent($r); -# -------------------------------------- Any accessibility options to remember? - if (($form->{'interface'}) && ($form->{'remember'} eq 'true')) { - foreach my $option ('imagesuppress','appletsuppress', - 'embedsuppress','fontenhance','blackwhite') { - if ($form->{$option} eq 'true') { - &Apache::lonnet::put('environment',{$option => 'on'}, - $domain,$username); - } else { - &Apache::lonnet::del('environment',[$option], - $domain,$username); - } - } - } # ------------------------------------------------------------- Get environment my %userenv = &Apache::lonnet::dump('environment',$domain,$username); @@ -9824,10 +10371,8 @@ sub init_user_environment { if ($userenv{'texengine'} eq 'ttm') { $clientmathml=1; } # --------------- Do not trust query string to be put directly into environment - foreach my $option ('imagesuppress','appletsuppress', - 'embedsuppress','fontenhance','blackwhite', - 'interface','localpath','localres') { - $form->{$option}=~s/[\n\r\=]//gs; + foreach my $option ('interface','localpath','localres') { + $form->{$option}=~s/[\n\r\=]//gs; } # --------------------------------------------------------- Write first profile @@ -9861,13 +10406,6 @@ sub init_user_environment { $form->{'interface'}=~s/\W//gs; $initial_env{"browser.interface"} = $form->{'interface'}; $env{'browser.interface'}=$form->{'interface'}; - foreach my $option ('imagesuppress','appletsuppress', - 'embedsuppress','fontenhance','blackwhite') { - if (($form->{$option} eq 'true') || - ($userenv{$option} eq 'on')) { - $initial_env{"browser.$option"} = "on"; - } - } } foreach my $tool ('aboutme','blog','portfolio') { @@ -9875,6 +10413,12 @@ sub init_user_environment { &Apache::lonnet::usertools_access($username,$domain,$tool,'reload'); } + foreach my $crstype ('official','unofficial') { + $userenv{'canrequest.'.$crstype} = + &Apache::lonnet::usertools_access($username,$domain,$crstype, + 'reload','requestcourses'); + } + $env{'user.environment'} = "$lonids/$cookie.id"; if (tie(my %disk_env,'GDBM_File',"$lonids/$cookie.id",