--- loncom/interface/loncommon.pm 2009/05/11 17:40:34 1.812 +++ loncom/interface/loncommon.pm 2009/07/27 13:26:16 1.869 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.812 2009/05/11 17:40:34 bisitz Exp $ +# $Id: loncommon.pm,v 1.869 2009/07/27 13:26:16 kalberla Exp $ # # Copyright Michigan State University Board of Trustees # @@ -407,6 +407,7 @@ sub studentbrowser_javascript { ) { return ''; } return (<<'ENDSTDBRW'); ENDSTDBRW } @@ -461,6 +463,7 @@ sub selectstudent_link { sub authorbrowser_javascript { return <<"ENDAUTHORBRW"; ENDAUTHORBRW } 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 $crs_or_grp_alert = &mt('Please select the type of LON-CAPA entity - Course or Community - for which you wish to add/modify a user role'); my $output = ' '; return $output; } @@ -829,6 +835,7 @@ sub linked_select_forms { # output the javascript to do the changing my $result = ''; $result.=' END # output the initial values for the selection lists @@ -1027,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; @@ -1394,6 +1404,7 @@ sub resize_textarea_js { my $geometry = &viewport_geometry_js(); return <<"RESIZE"; RESIZE @@ -2299,7 +2311,7 @@ sub authform_internal{ $result = &mt ('[_1] Internally authenticated (with initial password [_2])', ''.$autharg); - $result.="'; + $result.="'; return $result; } @@ -3754,7 +3766,7 @@ sub blockcheck { ($env{'request.role'} !~ m{^st\./\Q$cdom\E/\Q$cnum\E})); next if ($no_userblock); - # Retrieve blocking times and identity of blocker for course + # Retrieve blocking times and identity of locker for course # of specified user, unless user has 'evb' privilege. my ($start,$end)=&get_blocks($setters,$activity,$cdom,$cnum); @@ -3819,103 +3831,48 @@ sub parse_block_record { return ($setuname,$setudom,$title,$blocks); } -sub build_block_table { - my ($startblock,$endblock,$setters) = @_; - my %lt = &Apache::lonlocal::texthash( - 'cacb' => 'Currently active communication blocks', - 'cour' => 'Course', - 'dura' => 'Duration', - 'blse' => 'Block set by' - ); - my $output; - $output = '
'.$lt{'cacb'}.':
'; - $output .= &start_data_table(); - $output .= ' - - '.$lt{'cour'}.' - '.$lt{'dura'}.' - '.$lt{'blse'}.' - -'; - foreach my $course (keys(%{$setters})) { - my %courseinfo=&Apache::lonnet::coursedescription($course); - for (my $i=0; $i<@{$$setters{$course}{staff}}; $i++) { - my ($uname,$udom) = @{$$setters{$course}{staff}[$i]}; - my $fullname = &plainname($uname,$udom); - if (defined($env{'user.name'}) && defined($env{'user.domain'}) - && $env{'user.name'} ne 'public' - && $env{'user.domain'} ne 'public') { - $fullname = &aboutmewrapper($fullname,$uname,$udom); - } - my ($openblock,$closeblock) = @{$$setters{$course}{times}[$i]}; - $openblock = &Apache::lonlocal::locallocaltime($openblock); - $closeblock= &Apache::lonlocal::locallocaltime($closeblock); - $output .= &Apache::loncommon::start_data_table_row(). - ''.$courseinfo{'description'}.''. - ''.$openblock.' to '.$closeblock.''. - ''.$fullname.''. - &Apache::loncommon::end_data_table_row(); - } - } - $output .= &end_data_table(); -} - sub blocking_status { - my ($activity,$uname,$udom) = @_; - my %setters; - my ($blocked,$output,$ownitem,$is_course); - my ($startblock,$endblock)=&blockcheck(\%setters,$activity,$uname,$udom); - if ($startblock && $endblock) { - $blocked = 1; - if (wantarray) { - my $category; - if ($activity eq 'boards') { - $category = 'Discussion posts in this course'; - } elsif ($activity eq 'blogs') { - $category = 'Blogs'; - } elsif ($activity eq 'port') { - if (defined($uname) && defined($udom)) { - if ($uname eq $env{'user.name'} && - $udom eq $env{'user.domain'}) { - $ownitem = 1; - } - } - $is_course = &Apache::lonnet::is_course($udom,$uname); - if ($ownitem) { - $category = 'Your portfolio files'; - } elsif ($is_course) { - my $coursedesc; - foreach my $course (keys(%setters)) { - my %courseinfo = - &Apache::lonnet::coursedescription($course); - $coursedesc = $courseinfo{'description'}; - } - $category = "Group portfolio in the course '$coursedesc'"; - } else { - $category = 'Portfolio files belonging to '; - if ($env{'user.name'} eq 'public' && - $env{'user.domain'} eq 'public') { - $category .= &plainname($uname,$udom); - } else { - $category .= &aboutmewrapper(&plainname($uname,$udom),$uname,$udom); - } - } - } elsif ($activity eq 'groups') { - $category = 'Groups in this course'; - } - my $showstart = &Apache::lonlocal::locallocaltime($startblock); - my $showend = &Apache::lonlocal::locallocaltime($endblock); - $output = '
'.&mt('[_1] will be inaccessible between [_2] and [_3] because communication is being blocked.',$category,$showstart,$showend).'
'; - if (!($activity eq 'port' && !($ownitem) && !($is_course))) { - $output .= &build_block_table($startblock,$endblock,\%setters); - } - } - } - if (wantarray) { - return ($blocked,$output); - } else { - return $blocked; + my $blocked; + my ($activity,$uname,$udom) = @_; + my %setters; + my ($startblock,$endblock)=&blockcheck(\%setters,$activity,$uname,$udom); + if ($startblock && $endblock) { + $blocked = 1; + } + if(!wantarray) { + return $blocked; + } + my $output; + my $querystring; + $querystring = "?activity=$activity"; + + $output .= <<"END_MYBLOCK"; + +END_MYBLOCK + my $popupUrl = "/adm/blockingstatus/$querystring"; + $output .= <<"END_BLOCK"; +
+ + Communication Blocked + Communication Blocked +
+ +END_BLOCK + + return ($blocked, $output); } ############################################### @@ -4144,41 +4101,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 = + '
' + .$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() + .'
'; +} + ############################################### ############################################### @@ -4211,17 +4247,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 @@ -4241,8 +4271,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); } @@ -4296,25 +4326,7 @@ sub bodytag { $name = &aboutmewrapper($name,$env{'user.name'},$env{'user.domain'}); } - my $roleinfo=(< -
- $name -   -
-
-$role  -
-
-$realm  -
- -ENDROLE - my $titleinfo = '

'.$title.'

'; - if ($customtitle) { - $titleinfo = $customtitle; - } # # Extra info if you are the DC my $dc_info = ''; @@ -4327,57 +4339,33 @@ ENDROLE $dc_info = '('.$dc_info.')'; } - if (($env{'environment.remote'} eq 'off') || ($args->{'suppress_header_logos'})) { + $role = "($role)" if $role; + &get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['inhibitmenu']); + + if ($env{'environment.remote'} eq 'off') { # No Remote if ($env{'request.state'} eq 'construct') { $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 = '' + ."" + .'
$titleinfo $dc_info
'; + + if ($no_nav_bar) { $bodytag .= $titletable; } else { - $bodytag .= qq|
$name ($role)
- $realm$dc_info
|; + $bodytag .= qq|
$name $role
+ $realm $dc_info
| unless $env{'form.inhibitmenu'}; + if ($env{'request.state'} eq 'construct') { - $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg, - $titletable); + $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$titletable); } else { - $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg). - $titletable; + $bodytag .= &Apache::lonmenu::menubuttons($forcereg).$titletable; } } return $bodytag; @@ -4395,11 +4383,13 @@ ENDROLE # Explicit link to get inline menu my $menu= ($no_inline_link?'' - :'
'.&mt('Switch to Inline Menu Mode').''); + :''.&mt('Switch to Inline Menu Mode').''); + $bodytag .= qq|
$name $role + $realm $dc_info
+
    +
  1. $menu
  2. +
| unless $env{'form.inhibitmenu'}; # - if ($notitle) { - return $bodytag; - } return(< @@ -4407,7 +4397,6 @@ $bodytag $messages  $titleinfo $dc_info $menu -$roleinfo ENDBODY @@ -4452,15 +4441,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}.'" '; @@ -4538,9 +4518,9 @@ sub standard_css { my $sans = 'Verdana,Arial,Helvetica,sans-serif'; my $mono = 'monospace'; - my $data_table_head = $tabbg; - my $data_table_light = '#EEEEEE'; - my $data_table_dark = '#DDDDDD'; + my $data_table_head = $sidebg; + my $data_table_light = '#FAFAFA'; + my $data_table_dark = '#F0F0F0'; my $data_table_darker = '#CCCCCC'; my $data_table_highlight = '#FFFF00'; my $mail_new = '#FFBB77'; @@ -4577,6 +4557,14 @@ a:focus { background: yellow } +hr { + clear: both; + color: $tabbg; + background-color: $tabbg; + height: 3px; + border: none; +} + form, .inline { display: inline; } @@ -4657,7 +4645,6 @@ div.LC_confirm_box .LC_success img { .LC_disc_action_links_bar { background: $tabbg; - font-family: $sans; border: none; margin: 4px; } @@ -4700,9 +4687,10 @@ table#LC_nav_location { table#LC_title_bar a { color: $fontmenu; } - + table#LC_title_bar { - /*display: none;*/ + clear: both; + display: none; } table#LC_title_bar, @@ -4714,48 +4702,15 @@ table#LC_title_bar.LC_with_remote { border-width: $border; background: $pgbg; color: $fontmenu; - font-family: $sans; - border-collapse: collapse; - padding: 0; -} - -table.LC_docs_path { - width: 100%; - border: 0; - background: $pgbg; - font-family: $sans; border-collapse: collapse; padding: 0; + margin: 0; } table#LC_title_bar td { background: $tabbg; } -table#LC_title_bar .LC_title_bar_who { - background: $tabbg; - color: $fontmenu; - font: small $sans; - text-align: right; - margin: 0; -} - -table#LC_title_bar .LC_title_bar_name { - margin: 0; -} - -table#LC_title_bar .LC_title_bar_role { - margin: 0; -} - -table#LC_title_bar .LC_title_bar_realm { - margin: 0; -} - -span.LC_metadata { - font-family: $sans; -} - table#LC_menubuttons img{ border: none; } @@ -4771,7 +4726,6 @@ table#LC_top_nav td { table#LC_top_nav td a, div#LC_top_nav a { color: $font; - font-family: $sans; } table#LC_top_nav td.LC_top_nav_logo { @@ -4796,21 +4750,12 @@ table#LC_top_nav td.LC_top_nav_login { text-align: center; } -table.LC_breadcrumbs td, -table.LC_docs_path td { - background: $tabbg; - color: $fontmenu; - font-family: $sans; - font-size: smaller; +.LC_breadcrumbs_component { + float: right; + margin: 0 1em; } - -table.LC_breadcrumbs td.LC_breadcrumbs_component, -table.LC_docs_path td.LC_docs_path_component { - background: $tabbg; - color: $fontmenu; - font-family: $sans; - font-size: larger; - text-align: right; +.LC_breadcrumbs_component img { + vertical-align: middle; } td.LC_table_cell_checkbox { @@ -4825,6 +4770,28 @@ table#LC_mainmenu td.LC_mainmenu_column font-size: 70%; } +#LC_breadcrumbs { + clear:both; + background: $sidebg; + border-bottom: 1px solid $lg_border_color; + line-height: 32px; + margin: 0; + padding: 0; +} + +/* Preliminary fix to hide breadcrumbs inside remote control window */ +#LC_remote #LC_breadcrumbs { + display:none; +} + +#LC_head_subbox { + clear:both; + background: #F8F8F8; /* $sidebg; */ + border-bottom: 1px solid $lg_border_color; + margin: 0 0 10px 0; + padding: 5px; +} + .LC_fontsize_medium { font-size: 85%; } @@ -4835,7 +4802,6 @@ table#LC_mainmenu td.LC_mainmenu_column .LC_menubuttons_inline_text { color: $font; - font-family: $sans; font-size: 90%; padding-left:3px; } @@ -4847,7 +4813,6 @@ table#LC_mainmenu td.LC_mainmenu_column .LC_menubuttons_category { color: $font; background: $pgbg; - font-family: $sans; font-size: larger; font-weight: bold; } @@ -4857,29 +4822,18 @@ td.LC_menubuttons_text { } .LC_current_location { - font-family: $sans; background: $tabbg; } .LC_new_mail { - font-family: $sans; background: $tabbg; font-weight: bold; } -.LC_preferences_labeltext { - font-family: $sans; - text-align: right; -} - .LC_roleslog_note { font-size: small; } -.LC_mail_functions { - font-weight: bold; -} - table.LC_data_table, table.LC_mail_list { border: 1px solid #000000; @@ -5127,7 +5081,6 @@ span.LC_current_location { span.LC_parm_menu_item { font-size: larger; - font-family: $sans; } span.LC_parm_scope_all { @@ -5182,7 +5135,6 @@ table#LC_helpmenu { table#LC_helpmenu fieldset legend { font-size: larger; - font-weight: bold; } table#LC_helpmenu_links { @@ -5235,7 +5187,7 @@ table.LC_pick_box { } table.LC_pick_box td.LC_pick_box_title { - background: $tabbg; + background: $sidebg; font-weight: bold; text-align: right; vertical-align: top; @@ -5243,14 +5195,6 @@ table.LC_pick_box td.LC_pick_box_title { padding: 8px; } -table.LC_pick_box td.LC_selfenroll_pick_box_title { - background: $tabbg; - font-weight: bold; - text-align: right; - width: 350px; - padding: 8px; -} - table.LC_pick_box td.LC_pick_box_value { text-align: left; padding: 8px; @@ -5370,7 +5314,6 @@ table.LC_notify_front_page td { } .LC_topic_bar { - font-family: $sans; font-weight: bold; width: 100%; background: $tabbg; @@ -5399,17 +5342,45 @@ table.LC_status_selector td { div.LC_feedback_link { clear: both; - background: white; + 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; + vertical-align:middle; +} + +div.LC_feedback_link a{ + text-decoration: none; +} + +div.LC_comblock { + display:inline; + color:$font; + font-size:90%; +} + +div.LC_feedback_link div.LC_comblock { + padding-left:5px; +} + +div.LC_feedback_link div.LC_comblock a { + color:$font; } 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; @@ -5427,14 +5398,12 @@ table.LC_prior_tries td { .LC_answer_correct { background: lightgreen; - font-family: $sans; color: darkgreen; padding: 6px; } .LC_answer_charged_try { background: #FFAAAA; - font-family: $sans; color: darkred; padding: 6px; } @@ -5443,28 +5412,24 @@ table.LC_prior_tries td { .LC_answer_no_grade, .LC_answer_late { background: lightyellow; - font-family: $sans; color: black; padding: 6px; } .LC_answer_previous { background: lightblue; - font-family: $sans; color: darkblue; padding: 6px; } .LC_answer_no_message { background: #FFFFFF; - font-family: $sans; color: black; padding: 6px; } .LC_answer_unknown { background: orange; - font-family: $sans; color: black; padding: 6px; } @@ -5499,8 +5464,7 @@ table.LC_prior_match tr td { border: 1px solid #000000; } -td.LC_nobreak, -span.LC_nobreak { +.LC_nobreak { white-space: nowrap; } @@ -5524,21 +5488,24 @@ table.LC_docs_documents td.LC_docs_docum padding: 4px; } -.LC_docs_entry_move { - border: none; - border-collapse: collapse; -} - -.LC_docs_entry_move td { - border: 2px solid #BBBBBB; +div.LC_docs_entry_move { + border: 1px solid #BBBBBB; background: #DDDDDD; + width: 22px; + padding: 1px; + margin: 0; } -.LC_docs_editor td.LC_docs_entry_commands { +table.LC_data_table tr > td.LC_docs_entry_commands, +table.LC_data_table tr > td.LC_docs_entry_parameter { background: #DDDDDD; font-size: x-small; } +.LC_docs_entry_parameter { + white-space: nowrap; +} + .LC_docs_copy { color: #000099; } @@ -5560,17 +5527,6 @@ table.LC_docs_documents td.LC_docs_docum font-size: x-small; } -.LC_docs_editor td.LC_docs_entry_title, -.LC_docs_editor td.LC_docs_entry_icon { - background: #FFFFBB; -} - -.LC_docs_editor td.LC_docs_entry_parameter { - background: #BBBBFF; - font-size: x-small; - white-space: nowrap; -} - table.LC_docs_adddocs td, table.LC_docs_adddocs th { border: 1px solid #BBBBBB; @@ -5702,12 +5658,6 @@ 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; @@ -5737,14 +5687,6 @@ div.LC_edit_problem_saves { padding-bottom: 5px; } -hr.LC_edit_problem_divide { - clear: both; - color: $tabbg; - background-color: $tabbg; - height: 3px; - border: none; -} - img.stift{ border-width: 0; vertical-align: middle; @@ -5763,7 +5705,6 @@ table#LC_mainmenu td.LC_mainmenu_col_fie .LC_mainmenu_fieldset_category { color: $font; background: $pgbg; - font-family: $sans; font-size: small; font-weight: bold; } @@ -5791,7 +5732,7 @@ ul.LC_TabContent li:hover a { } h1 { - padding:5px 10px 5px 20px; + padding: 0; line-height:130%; } @@ -5809,13 +5750,14 @@ h2,h3,h4,h5,h6 { border-bottom:solid 1px $lg_border_color; } +.LC_Box > .LC_hcell { + margin: 0 -10px 10px -10px; +} + .LC_noBorder { border: 0; } - -/* Main Header with discription of Person, Course, etc. */ - .LC_Right { float: right; margin: 0; @@ -5844,21 +5786,27 @@ dl,ul,div,fieldset { /* overflow: hidden; */ } -#head_userinfo { +fieldset > legend { + font-weight: bold; + padding: 0 5px 0 5px; +} + +#LC_nav_bar { float: left; - margin: 0; + margin: 0.2em 0 0 0; } -#head_userinfo em{ +#LC_nav_bar em{ font-weight: bold; font-style: normal; } ol.LC_smallMenu { float: right; + margin: 0.2em 0 0 0; } -ol.LC_smallMenu, ol#LC_PathBreadcrumbs { +ol#LC_PathBreadcrumbs { margin: 0; } @@ -5885,12 +5833,10 @@ ul#LC_TabMainMenuContent { 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; @@ -5899,14 +5845,22 @@ ul#LC_TabMainMenuContent li { vertical-align: middle; } -ul.LC_TabContent , -ul.LC_TabContentBigger { +ul.LC_TabContent { display:block; + background: $sidebg; + border-bottom: solid 1px $lg_border_color; list-style:none; - margin: 0; + margin: -10px -10px 0 -10px; padding: 0; } +ul.LC_TabContentBigger { + display:block; + list-style:none; + padding: 0; +} + + ul.LC_TabContent li, ul.LC_TabContentBigger li { display: inline; @@ -5922,7 +5876,7 @@ ul#LC_TabMainMenuContent li a { } ul.LC_TabContent { - min-height:1.6em; + min-height:1.5em; } ul.LC_TabContent li { @@ -5932,6 +5886,10 @@ ul.LC_TabContent li { border-bottom:solid 1px $lg_border_color; } +ul.LC_TabContent .right { + float:right; +} + ul.LC_TabContent li a, ul.LC_TabContent li { color:rgb(47,47,47); text-decoration:none; @@ -5942,7 +5900,7 @@ ul.LC_TabContent li a, ul.LC_TabContent ul.LC_TabContent li:hover, ul.LC_TabContent li.active { background:#FFFFFF url(/adm/lonIcons/open.gif) no-repeat scroll right center; - border-bottom:solid 1px #FFFFFF; + border-bottom:solid 2px #FFFFFF; padding-right: 16px; } @@ -5952,46 +5910,51 @@ ul.LC_TabContentBigger li { 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; + background: #d9d9d9; +} + +#maincoursedoc { + clear:both; } ul.LC_TabContentBigger li:hover, ul.LC_TabContentBigger li.active { - background:url(/adm/lonIcons/lightGreyBG.png) repeat-x right bottom; + background: #ffffff; + color:$font; } ul.LC_TabContentBigger li, ul.LC_TabContentBigger li a { font-size:110%; font-weight:bold; + color: #737373; } -ol#LC_MenuBreadcrumbs, -ol#LC_PathBreadcrumbs, ul.LC_CourseBreadcrumbs { - border-top: solid 1px RGB(255, 255, 255); - height: 20px; - line-height: 20px; - vertical-align: bottom; - margin: 0 0 30px 0; + background: $sidebg; + line-height: 32px; + padding-left: 10px; + margin: 0 0 10px 0; + list-style-position: inside; + +} + +ol#LC_MenuBreadcrumbs, +ol#LC_PathBreadcrumbs { 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, ul.LC_CourseBreadcrumbs li { -/* - background: url(/adm/lonIcons/arrow_white.png) no-repeat left center; -*/ - display: inline; - padding: 0 0 0 10px; -/* vertical-align: bottom; */ - overflow:hidden; + display: inline; + white-space: nowrap; } -ol#LC_MenuBreadcrumbs li a, ul.LC_CourseBreadcrumbs li a { +ol#LC_MenuBreadcrumbs li a, +ul.LC_CourseBreadcrumbs li a { text-decoration: none; font-size:90%; } @@ -6002,18 +5965,9 @@ ol#LC_PathBreadcrumbs li a { font-weight:bold; } -.LC_BoxPadding { - padding: 10px; -} - -.LC_ContentBoxSpecial { - border: solid 1px $lg_border_color; -} - -.LC_ContentBoxSpecialContactInfo { - border: solid 1px $lg_border_color; - max-width:25%; - min-width:25%; +.LC_Box { + border: solid 1px $lg_border_color; + padding: 0 10px 10px 10px; } .LC_AboutMe_Image { @@ -6102,26 +6056,6 @@ div.LC_columnSection>* { overflow:hidden; } -.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: 0; - font-size: 0; - height: 0; -} - .LC_loginpage_container { text-align:left; margin : 0 auto; @@ -6176,7 +6110,7 @@ table em { table.LC_tableBrowseRes, table.LC_tableOfContent { border:none; - border-spacing: 1; + border-spacing: 1px; padding: 3px; background-color: #FFFFFF; font-size: 90%; @@ -6270,7 +6204,7 @@ a.LC_toolbarItem { background-color:transparent; } -ul.LC_functionslist li { +ul.LC_funclist li { float: left; white-space: nowrap; height: 35px; /* at least as high as heighest list item */ @@ -6405,7 +6339,8 @@ sub xml_begin { .''; } else { - $output=''; + $output='' + .''; } return $output; } @@ -6467,7 +6402,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 @@ -6481,12 +6416,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 @@ -6496,6 +6427,8 @@ $args - additional optional args support inherit_jsmath -> when creating popup window in a page, should it have jsmath forced on by the current page + bread_crumbs -> Array containing breadcrumbs + bread_crumbs_components -> if exists show it as headline else show only the breadcrumbs =back @@ -6528,16 +6461,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'}) { @@ -6547,7 +6479,15 @@ sub start_page { $result = &html_encode($result); } - #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 @@ -6791,14 +6731,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'; } @@ -6809,6 +6752,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 @@ -7552,6 +7527,7 @@ ENDSCRIPT my $output = <<"END_BLOCK"; $new_user_create @@ -8514,7 +8491,7 @@ sub csv_print_samples { $r->print(&mt('Samples').'
'.&start_data_table(). &start_data_table_header_row()); foreach my $sample (sort({$a <=> $b} keys(%{ $samples->[0] }))) { - $r->print(''.&mt('Column [_1]',($sample+1)).''); } + $r->print(''.&mt('Column [_1]',($sample+1)).''); } $r->print(&end_data_table_header_row()); foreach my $hash (@$samples) { $r->print(&start_data_table_row()); @@ -10163,7 +10140,7 @@ sub group_term { my $crstype = &course_type(); my %names = ( 'Course' => 'group', - 'Group' => 'team', + 'Community' => 'group', ); return $names{$crstype}; } @@ -10227,7 +10204,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'}; @@ -10281,19 +10274,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); @@ -10311,10 +10291,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 @@ -10348,13 +10326,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') { @@ -10362,7 +10333,7 @@ sub init_user_environment { &Apache::lonnet::usertools_access($username,$domain,$tool,'reload'); } - foreach my $crstype ('official','unofficial') { + foreach my $crstype ('official','unofficial','community') { $userenv{'canrequest.'.$crstype} = &Apache::lonnet::usertools_access($username,$domain,$crstype, 'reload','requestcourses');