--- loncom/interface/loncommon.pm 2010/03/19 22:15:27 1.692.4.33 +++ loncom/interface/loncommon.pm 2009/05/27 13:42:04 1.826 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.692.4.33 2010/03/19 22:15:27 raeburn Exp $ +# $Id: loncommon.pm,v 1.826 2009/05/27 13:42:04 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -271,7 +271,7 @@ BEGIN { } } &Apache::lonnet::logthis( - "INFO: Read file types"); + "INFO: Read file types"); $readit=1; } # end of unless($readit) @@ -452,7 +452,7 @@ sub selectstudent_link { &mt('Select User').''; } if ($env{'request.role'}=~/^(au|dc|su)/) { - $callargs .= ",1"; + $callargs .= ",1"; return ''. ''. &mt('Select User').''; @@ -462,7 +462,7 @@ sub selectstudent_link { sub authorbrowser_javascript { return <<"ENDAUTHORBRW"; - ENDAUTHORBRW } sub coursebrowser_javascript { - my ($domainfilter,$sec_element,$formname,$role_element,$crstype) = @_; - my $wintitle = 'Course_Browser'; - if ($crstype eq 'Community') { - $wintitle = 'Community_Browser'; - } - my $id_functions = &javascript_index_functions(); - my $output = ' + 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; -} - -sub javascript_index_functions { - return <<"ENDJS"; - -function getFormIdByName(formname) { - for (var i=0;i -1) { - var domid = getIndexByName(formid,udom); - if (domid > -1) { - if (document.forms[formid].elements[domid].type == 'select-one') { - userdom=document.forms[formid].elements[domid].options[document.forms[formid].elements[domid].selectedIndex].value; - } - if (document.forms[formid].elements[domid].type == 'hidden') { - userdom=document.forms[formid].elements[domid].value; + function getFormIdByName(formname) { + for (var i=0;i -1) { - var unameid = getIndexByName(formid,uname); - var domid = getIndexByName(formid,udom); - var hidedomid = getIndexByName(formid,origdom); - if (hidedomid > -1) { - var fixeddom = document.forms[formid].elements[hidedomid].value; - var unameval = document.forms[formid].elements[unameid].value; - if ((fixeddom != '') && (fixeddom != undefined) && (fixeddom != null) && (unameval != '') && (unameval != undefined) && (unameval != null)) { - if (domid > -1) { - var slct = document.forms[formid].elements[domid]; - if (slct.type == 'select-one') { - var i; - for (i=0;i' ."".$linktext.'' + .'","'.$multflag.'","'.$selecttype.'");' + ."'>".&mt('Select Course').'' .''; } @@ -782,14 +635,6 @@ sub selectauthor_link { &mt('Select Author').''; } -sub selectuser_link { - my ($form,$unameelem,$domelem,$lastelem,$firstelem,$emailelem,$hdomelem, - $coursedom,$linktext,$caller) = @_; - return ''.$linktext.''; -} - sub check_uncheck_jscript { my $jscript = <<"ENDSCRT"; function checkAll(field) { @@ -1098,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; @@ -1118,20 +960,22 @@ 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 .= ''. - ''.&mt('Help: [_1]',$topic).
-                 ''; - if ($text ne '') { - $template.='
'; + $template.=' ' + .''.&mt('Help: [_1]',$topic).''; + if ($text ne "") { + $template.=''; } return $template; @@ -1144,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; } @@ -1170,7 +1015,7 @@ sub general_help { my $helptopic='Student_Intro'; if ($env{'request.role'}=~/^(ca|au)/) { $helptopic='Authoring_Intro'; - } elsif ($env{'request.role'}=~/^(cc|co)/) { + } elsif ($env{'request.role'}=~/^cc/) { $helptopic='Course_Coordination_Intro'; } elsif ($env{'request.role'}=~/^dc/) { $helptopic='Domain_Coordination_Intro'; @@ -1205,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; @@ -1230,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); @@ -1248,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; @@ -1269,8 +1111,8 @@ sub help_menu_js { my $template .= <<"ENDTEMPLATE"; ENDTEMPLATE return $template; @@ -1308,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); @@ -1333,7 +1174,7 @@ sub help_open_bug { { $template .= "". - " - + + $roleinfo @@ -4664,15 +4484,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}.'" '; @@ -4733,6 +4544,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 || @@ -4742,11 +4555,15 @@ sub standard_css { my $vlink = &designparm($function.'.vlink', $domain); my $link = &designparm($function.'.link', $domain); + my $loginbg = &designparm('login.sidebg',$domain); + my $bgcol = &designparm('login.bgcol',$domain); + my $textcol = &designparm('login.textcol',$domain); + my $sans = 'Verdana,Arial,Helvetica,sans-serif'; my $mono = 'monospace'; my $data_table_head = $tabbg; - my $data_table_light = '#FAFAFA'; - my $data_table_dark = '#F0F0F0'; + my $data_table_light = '#EEEEEE'; + my $data_table_dark = '#DDDDDD'; my $data_table_darker = '#CCCCCC'; my $data_table_highlight = '#FFFF00'; my $mail_new = '#FFBB77'; @@ -4759,7 +4576,7 @@ sub standard_css { my $mail_other_hover = '#669999'; my $table_header = '#DDDDDD'; my $feedback_link_bg = '#BBBBBB'; - my $lg_border_color = '#C8C8C8'; + my $lg_border_color = '#C8C8C8'; my $border = ($env{'browser.type'} eq 'explorer' || $env{'browser.type'} eq 'safari' ) ? '0 2px 0 2px' @@ -4767,36 +4584,56 @@ sub standard_css { 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; @@ -5113,15 +4990,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: smaller; + font-size: small; border-bottom: 1px solid #000000; } + table.LC_nested_outer tr td.LC_subheader { background-color: $data_table_head; font-weight: bold; @@ -5129,20 +5010,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, @@ -5158,7 +5043,7 @@ table.LC_createuser { } table.LC_createuser tr.LC_section_row td { - font-size: smaller; + font-size: small; } table.LC_createuser tr.LC_info_row td { @@ -5171,16 +5056,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; } @@ -5188,99 +5077,44 @@ 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_portfolio_actions { - width: auto; - background: $pgbg; - border: none; - border-spacing: 2px 2px; - padding: 0; - margin: 0; - border-collapse: separate; -} -table#LC_portfolio_actions td.LC_label { - background: $tabbg; - text-align: right; -} -table#LC_portfolio_actions td.LC_value { - background: $tabbg; -} - -table#LC_cstr_controls { - width: 100%; - border-collapse: collapse; -} -table#LC_cstr_controls tr td { - border: 4px solid $pgbg; - padding: 4px; - text-align: center; - background: $tabbg; -} -table#LC_cstr_controls tr th { - border: 4px solid $pgbg; - background: $table_header; - text-align: center; - font-family: $sans; - font-size: smaller; -} - -table#LC_browser { - -} -table#LC_browser tr th { - background: $table_header; -} -table#LC_browser tr td { - padding: 2px; -} -table#LC_browser tr.LC_browser_file, -table#LC_browser tr.LC_browser_file_published { - background: #CCFF88; -} -table#LC_browser tr.LC_browser_file_locked, -table#LC_browser tr.LC_browser_file_unpublished { - background: #FFAA99; -} -table#LC_browser tr.LC_browser_file_obsolete { - background: #AAAAAA; -} -table#LC_browser tr.LC_browser_file_modified, -table#LC_browser tr.LC_browser_file_metamodified { - background: #FFFF77; -} -table#LC_browser tr.LC_browser_folder { - background: #CCCCFF; -} table.LC_data_table tr > td.LC_browser_file, table.LC_data_table tr > td.LC_browser_file_published { - background: #AAEE77; + background: #CCFF88; } table.LC_data_table tr > td.LC_browser_file_locked, @@ -5289,39 +5123,44 @@ table.LC_data_table tr > td.LC_browser_f } table.LC_data_table tr > td.LC_browser_file_obsolete { - background: #888888; + background: #AAAAAA; } table.LC_data_table tr > td.LC_browser_file_modified, table.LC_data_table tr > td.LC_browser_file_metamodified { - background: #F8F866; + background: #FFFF77; } table.LC_data_table tr.LC_browser_folder > td { - background: #E0E8FF; + background: #CCCCFF; } 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; } span.LC_current_location { - font-size: x-large; + font-size:larger; background: $pgbg; } @@ -5329,41 +5168,51 @@ 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: none; height: 55px; @@ -5374,6 +5223,7 @@ table#LC_helpmenu fieldset legend { font-size: larger; font-weight: bold; } + table#LC_helpmenu_links { width: 100%; border: 1px solid black; @@ -5381,6 +5231,7 @@ table#LC_helpmenu_links { padding: 0; border-spacing: 1px; } + table#LC_helpmenu_links tr td { padding: 1px; background: $tabbg; @@ -5388,11 +5239,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; @@ -5402,20 +5255,24 @@ 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; @@ -5424,6 +5281,7 @@ table.LC_pick_box td.LC_pick_box_title { width: 184px; padding: 8px; } + table.LC_pick_box td.LC_selfenroll_pick_box_title { background: $tabbg; font-weight: bold; @@ -5436,28 +5294,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: 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; @@ -5465,6 +5329,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; @@ -5472,48 +5337,58 @@ 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: 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: 0; @@ -5524,12 +5399,15 @@ 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; @@ -5539,34 +5417,36 @@ table.LC_notify_front_page td { 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%; + width: 100%; } + span.LC_feedback_link { background: $feedback_link_bg; font-size: larger; } + span.LC_message_link { background: $feedback_link_bg; font-size: larger; @@ -5585,33 +5465,49 @@ table.LC_prior_tries td { } .LC_answer_correct { - background: #AAFFAA; - color: black; + background: lightgreen; + font-family: $sans; + color: darkgreen; + padding: 6px; } + .LC_answer_charged_try { - background: #FFAAAA ! important; - color: black; + background: #FFAAAA; + font-family: $sans; + 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; + font-family: $sans; color: black; + padding: 6px; } + .LC_answer_previous { - background: #AAAAFF; - color: black; + 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; } - span.LC_prior_numerical, span.LC_prior_string, span.LC_prior_custom, @@ -5630,16 +5526,20 @@ 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; } -.LC_nobreak { +td.LC_nobreak, +span.LC_nobreak { white-space: nowrap; } @@ -5663,13 +5563,6 @@ table.LC_docs_documents td.LC_docs_docum padding: 4px; } -.LC_docs_course_commands div { - float: left; - border: 4px solid #AAAAAA; - padding: 4px; - background: #DDDDCC; -} - .LC_docs_entry_move { border: none; border-collapse: collapse; @@ -5684,15 +5577,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; } @@ -5706,6 +5603,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; @@ -5722,6 +5620,7 @@ table.LC_docs_adddocs th { table.LC_sty_begin { background: #BBFFBB; } + table.LC_sty_end { background: #FFBBBB; } @@ -5742,7 +5641,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; } @@ -5766,33 +5665,18 @@ div.LC_clear_float_footer { clear: both; } - -div.LC_grade_select_mode { - font-family: $sans; -} -div.LC_grade_select_mode div div { - margin: 5px; -} -div.LC_grade_select_mode_selector { - margin: 5px; - float: left; -} -div.LC_grade_select_mode_selector_header { - font: bold medium $sans; -} -div.LC_grade_select_mode_type { - clear: left; -} - 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: bold large $sans; + font-weight: bold; + font-size: large; } + div.LC_grade_show_user_odd_row div.LC_grade_user_name { background: #DDEEDD; } @@ -5806,12 +5690,15 @@ 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, div.LC_grade_assign_header { - font: bold large $sans; + font-weight: bold; + font-size: large; } + div.LC_grade_show_problem_problem, div.LC_grade_submissions_body, div.LC_grade_message_center_body, @@ -5820,8 +5707,10 @@ div.LC_grade_assign_body { width: 99%; background: #FFFFFF; } + span.LC_grade_check_note { - font: normal medium $sans; + font-weight: normal; + font-size: medium; display: inline; position: absolute; right: 1em; @@ -5830,15 +5719,19 @@ span.LC_grade_check_note { table.LC_scantron_action { width: 100%; } + table.LC_scantron_action tr th { - font: normal bold $sans; + font-weight:bold; + font-style:normal; } -div.LC_edit_problem_header, +.LC_edit_problem_header, div.LC_edit_problem_footer { - font: normal medium $sans; + font-weight: normal; + font-size: medium; margin: 2px; } + div.LC_edit_problem_header, div.LC_edit_problem_header div, div.LC_edit_problem_footer, @@ -5847,23 +5740,27 @@ 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: larger bold $sans; + font-weight: bold; + font-size: larger; background: $tabbg; padding: 3px; } + table.LC_edit_problem_header_title { - font: larger bold $sans; + font-size: larger; + font-weight: bold; width: 100%; border-color: $pgbg; border-style: solid; border-width: $border; - background: $tabbg; border-collapse: collapse; padding: 0; @@ -5873,10 +5770,12 @@ 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; @@ -5884,21 +5783,22 @@ hr.LC_edit_problem_divide { height: 3px; 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; @@ -5906,15 +5806,509 @@ table#LC_mainmenu td.LC_mainmenu_col_fie font-size: small; font-weight: bold; } -fieldset#LC_mainmenu_fieldset { - margin:0 10px 10px 0; - -} div.LC_createcourse { margin: 10px 10px 10px 10px; } +/* ---- Remove when done ---- +# The following styles is part of the redesign of LON-CAPA and are +# subject to change during this project. +# Don't rely on their current functionality as they might be +# changed or removed. +# --------------------------*/ + +a:hover, +ol.LC_smallMenu a:hover, +ol#LC_MenuBreadcrumbs a:hover, +ol#LC_PathBreadcrumbs a:hover, +ul#LC_TabMainMenuContent a:hover, +.LC_FormSectionClearButton input:hover +ul.LC_TabContent li:hover a { + color:#BF2317; + text-decoration:none; +} + +h1 { + padding: 0; + line-height:130%; +} + +h2,h3,h4,h5,h6 { + margin: 5px 0 5px 0; + padding: 0; + line-height:130%; +} + +.LC_hcell { + padding:3px 15px 3px 15px; + margin: 0; + background-color:$tabbg; + color:$fontmenu; + border-bottom:solid 1px $lg_border_color; +} + +.LC_noBorder { + border: 0; +} + + +/* Main Header with discription of Person, Course, etc. */ + +.LC_Right { + float: right; + margin: 0; + padding: 0; +} + +.LC_FormSectionClearButton input { + 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 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: 0; +} + +ol.LC_smallMenu li { + display: inline; + padding: 5px 5px 0 10px; + vertical-align: top; +} + +ol.LC_smallMenu li img { + vertical-align: bottom; +} + +ol.LC_smallMenu a { + font-size: 90%; + color: RGB(80, 80, 80); + text-decoration: none; +} + +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: 0; + padding: 0; +} + +ul.LC_TabContent li, +ul.LC_TabContentBigger li { + display: inline; + border-right: solid 1px $lg_border_color; + float:left; + line-height:140%; + white-space:nowrap; +} + +ul#LC_TabMainMenuContent li a { + color: $fontmenu; + text-decoration: none; +} + +ul.LC_TabContent { + min-height:1.6em; +} + +ul.LC_TabContent li { + vertical-align:middle; + padding: 0 10px 0 10px; + background-color:$tabbg; + border-bottom:solid 1px $lg_border_color; +} + +ul.LC_TabContent li a, ul.LC_TabContent li { + color:rgb(47,47,47); + text-decoration:none; + font-size:95%; + font-weight:bold; + padding-right: 16px; +} + +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; + padding-right: 16px; +} + +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; +} + +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; +} + +ol#LC_MenuBreadcrumbs li, +ol#LC_PathBreadcrumbs li, +ul#LC_CourseBreadcrumbs li { + display: inline; + padding: 0 0 0 10px; + overflow:hidden; +} + +ol#LC_MenuBreadcrumbs li a, +ul#LC_CourseBreadcrumbs li a { + text-decoration: none; + font-size:90%; +} + +ol#LC_PathBreadcrumbs li a { + text-decoration:none; + font-size:100%; + 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_AboutMe_Image { + float:left; + margin-right:10px; +} + +.LC_Clear_AboutMe_Image { + clear:left; +} + +dl.LC_ListStyleClean dt { + padding-right: 5px; + display: table-header-group; +} + +dl.LC_ListStyleClean dd { + display: table-row; +} + +.LC_ListStyleClean, +.LC_ListStyleSimple, +.LC_ListStyleNormal, +.LC_ListStyle_Border, +.LC_ListStyleSpecial { + /*display:block; */ + list-style-position: inside; + list-style-type: none; + overflow: hidden; + padding: 0; +} + +.LC_ListStyleSimple li, +.LC_ListStyleSimple dd, +.LC_ListStyleNormal li, +.LC_ListStyleNormal dd, +.LC_ListStyleSpecial li, +.LC_ListStyleSpecial dd { + margin: 0; + padding: 5px 5px 5px 10px; + clear: both; +} + +.LC_ListStyleClean li, +.LC_ListStyleClean dd { + padding-top: 0; + padding-bottom: 0; +} + +.LC_ListStyleSimple dd, +.LC_ListStyleSimple li { + border-bottom: solid 1px $lg_border_color; +} + +.LC_ListStyleSpecial li, +.LC_ListStyleSpecial dd { + list-style-type: none; + background-color: RGB(220, 220, 220); + margin-bottom: 4px; +} + +table.LC_SimpleTable { + margin:5px; + border:solid 1px $lg_border_color; +} + +table.LC_SimpleTable tr { + padding: 0; + border:solid 1px $lg_border_color; +} + +table.LC_SimpleTable thead { + background:rgb(220,220,220); +} + +div.LC_columnSection { + display: block; + clear: both; + overflow: hidden; + margin: 0; +} + +div.LC_columnSection>* { + float: left; + margin: 10px 20px 10px 0; + 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; + width:90%; + padding: 10px; + height: auto; + background-color:#FFFFFF; + border:1px solid #CCCCCC; +} + + +.LC_loginpage_loginContainer { + float:left; + width: 182px; + padding: 2px; + border:1px solid #CCCCCC; + background-color:$loginbg; +} + +.LC_loginpage_loginContainer h2 { + margin-top: 0; + display:block; + background:$bgcol; + color:$textcol; + padding-left:5px; +} + +.LC_loginpage_loginInfo { + float:left; + width:182px; + border:1px solid #CCCCCC; + padding:2px; +} + +.LC_loginpage_space { + clear: both; + margin-bottom: 20px; + border-bottom: 1px solid #CCCCCC; +} + +.LC_loginpage_floatLeft { + float: left; + width: 200px; + margin: 0; +} + +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; +} + + END } @@ -6042,8 +6436,7 @@ sub xml_begin { .''; } else { - $output=''. - ''; + $output=''; } return $output; } @@ -6105,7 +6498,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 @@ -6124,7 +6517,6 @@ $args - additional optional args support 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 @@ -6173,37 +6565,47 @@ sub start_page { $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->{'no_inline_link'}, $args); } } if ($args->{'js_ready'}) { - $result = &js_ready($result); + $result = &js_ready($result); } if ($args->{'html_encode'}) { - $result = &html_encode($result); + $result = &html_encode($result); } + + # 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); - } - } + &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(); - } + #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; } + =pod =item * &head() @@ -6346,7 +6748,7 @@ sub simple_error_page { } sub start_data_table_empty_row { - $row_count[0]++; +# $row_count[0]++; return ''."\n";; } @@ -6427,8 +6829,11 @@ Returns either 'student','coordinator',' ############################################### sub get_users_function { - my $function = 'student'; - if ($env{'request.role'}=~/^(cc|co|in|ta|ep)/) { + 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)/) { @@ -6449,6 +6854,7 @@ sub get_users_function { 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 @@ -6498,7 +6904,7 @@ sub check_user_status { my $active_chk = 'none'; my $now = time; if (@uroles > 0) { - if (($role eq 'cc') || ($role eq 'co') || ($sec eq '') || (!defined($sec))) { + if (($role eq 'cc') || ($sec eq '') || (!defined($sec))) { $srchstr = '/'.$cdom.'/'.$crs.'_'.$role; } else { $srchstr = '/'.$cdom.'/'.$crs.'/'.$sec.'_'.$role; @@ -7129,7 +7535,6 @@ sub user_picker { # loncreateuser::print_user_query_page() # has been completed. next if ($option eq 'alc'); - next if (($option eq 'crs') && ($env{'form.form'} eq 'requestcrs')); next if ($option eq 'crs' && !$env{'request.course.id'}); if ($curr_selected{'srchin'} eq $option) { $srchinsel .= ' @@ -7178,9 +7583,12 @@ sub user_picker { official => 'institutional', unofficial => 'non-institutional', ); - $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.','','').'


'; + $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.' + ,'','') + .'


'; } } } @@ -7291,20 +7699,24 @@ $newuserscript $new_user_create +
$text"; + "$text"; } # Add the graphic @@ -1353,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); @@ -1378,7 +1218,7 @@ sub help_open_faq { { $template .= "". - " ENDROLE - my $titleinfo = ''.$title.''; + my $titleinfo = '

'.$title.'

'; if ($customtitle) { $titleinfo = $customtitle; } @@ -4547,43 +4394,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 = - '
$text"; + "$text"; } # Add the graphic @@ -1882,7 +1722,7 @@ sub select_form { $selectform.= '\n"; + ">".&mt($hash{$key})."\n"; } $selectform.=""; return $selectform; @@ -1947,7 +1787,7 @@ sub select_level_form { =pod -=item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$onchange,$incdoms) +=item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$autosubmit) Returns a string containing a \n"; foreach my $dom (@domains) { @@ -2991,6 +2825,7 @@ sub screenname { return $names{'screenname'}; } + # ------------------------------------------------------------- Confirm Wrapper =pod @@ -3021,6 +2856,7 @@ sub messagewrapper { '&subject='.&escape($subject).'&text='.&escape($text).'" '. 'title="'.&mt('Send message').'">'.$link.''; } + # --------------------------------------------------------------- Notes Wrapper sub noteswrapper { @@ -3028,6 +2864,7 @@ sub noteswrapper { return "$link"; } + # ------------------------------------------------------------- Aboutme Wrapper sub aboutmewrapper { @@ -3041,17 +2878,15 @@ sub aboutmewrapper { # ------------------------------------------------------------ Syllabus Wrapper - sub syllabuswrapper { - my ($linktext,$coursedir,$domain,$fontcolor)=@_; - if ($fontcolor) { - $linktext=''.$linktext.''; - } + my ($linktext,$coursedir,$domain)=@_; return qq{$linktext}; } +# ----------------------------------------------------------------------------- + sub track_student_link { - my ($linktext,$sname,$sdom,$target,$start,$only_body) = @_; + my ($linktext,$sname,$sdom,$target,$start) = @_; my $link ="/adm/trackstudent?"; my $title = 'View recent activity'; if (defined($sname) && $sname !~ /^\s*$/ && @@ -3065,7 +2900,6 @@ sub track_student_link { $target = ''; } if ($start) { $link.='&start='.$start; } - if ($only_body) { $link .= '&only_body=1'; } $title = &mt($title); $linktext = &mt($linktext); return qq{$linktext}. @@ -3352,6 +3186,7 @@ sub user_lang { return $user_lh; } + ############################################################### ## Student Answer Attempts ## ############################################################### @@ -3741,7 +3576,6 @@ sub findallcourses { if (!%roles) { %roles = ( cc => 1, - co => 1, in => 1, ep => 1, ta => 1, @@ -4068,7 +3902,7 @@ sub blocking_status { &Apache::lonnet::coursedescription($course); $coursedesc = $courseinfo{'description'}; } - $category = "Group portfolio files in the course '$coursedesc'"; + $category = "Group portfolio in the course '$coursedesc'"; } else { $category = 'Portfolio files belonging to '; if ($env{'user.name'} eq 'public' && @@ -4171,7 +4005,7 @@ sub determinedomain { my $domain=shift; if (! $domain) { # Determine domain if we have not been given one - $domain = &Apache::lonnet::default_login_domain(); + $domain = $Apache::lonnet::perlvar{'lonDefDomain'}; if ($env{'user.domain'}) { $domain=$env{'user.domain'}; } if ($env{'request.role.domain'}) { $domain=$env{'request.role.domain'}; @@ -4194,39 +4028,16 @@ sub get_domainconf { if (defined($cached)) { return %{$result}; } my %domconfig = &Apache::lonnet::get_dom('configuration', - ['login','rolecolors','loginvia'],$udom); + ['login','rolecolors'],$udom); my (%designhash,%legacy); if (keys(%domconfig) > 0) { if (ref($domconfig{'login'}) eq 'HASH') { if (keys(%{$domconfig{'login'}})) { foreach my $key (keys(%{$domconfig{'login'}})) { if (ref($domconfig{'login'}{$key}) eq 'HASH') { - if ($key eq 'loginvia') { - if (ref($domconfig{'login'}{'loginvia'}) eq 'HASH') { - my @ids = &Apache::lonnet::current_machine_ids(); - foreach my $hostname (@ids) { - if (ref($domconfig{'login'}{'loginvia'}{$hostname}) eq 'HASH') { - if ($domconfig{'login'}{'loginvia'}{$hostname}{'server'}) { - my $server = $domconfig{'login'}{'loginvia'}{$hostname}{'server'}; - $designhash{$udom.'.login.loginvia'} = $server; - if ($domconfig{'login'}{'loginvia'}{$hostname}{'serverpath'} eq 'custom') { - - $designhash{$udom.'.login.loginvia_'.$hostname} = $server.':'.$domconfig{'login'}{'loginvia'}{$hostname}{'custompath'}; - } else { - $designhash{$udom.'.login.loginvia_'.$hostname} = $server.':'.$domconfig{'login'}{'loginvia'}{$hostname}{'serverpath'}; - } - if ($domconfig{'login'}{'loginvia'}{$hostname}{'exempt'}) { - $designhash{$udom.'.login.loginvia_exempt_'.$hostname} = $domconfig{'login'}{'loginvia'}{$hostname}{'exempt'}; - } - } - } - } - } - } else { - foreach my $img (keys(%{$domconfig{'login'}{$key}})) { - $designhash{$udom.'.login.'.$key.'_'.$img} = - $domconfig{'login'}{$key}{$img}; - } + foreach my $img (keys(%{$domconfig{'login'}{$key}})) { + $designhash{$udom.'.login.'.$key.'_'.$img} = + $domconfig{'login'}{$key}{$img}; } } else { $designhash{$udom.'.login.'.$key}=$domconfig{'login'}{$key}; @@ -4253,11 +4064,6 @@ sub get_domainconf { } else { $legacy{'rolecolors'} = 1; } - if (ref($domconfig{'autoenroll'}) eq 'HASH') { - if ($domconfig{'autoenroll'}{'co-owners'}) { - $designhash{$udom.'.autoassign.co-owners'}=$domconfig{'autoenroll'}{'co-owners'}; - } - } if (keys(%legacy) > 0) { my %legacyhash = &get_legacy_domconf($udom); foreach my $item (keys(%legacyhash)) { @@ -4350,41 +4156,92 @@ 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 * &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() + .'
'; +} + ############################################### ############################################### @@ -4421,13 +4278,11 @@ Inputs: 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 @@ -4448,7 +4303,7 @@ other decorations will be returned. sub bodytag { my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,$customtitle, - $notopbar,$bgcolor,$notitle,$no_inline_link,$args)=@_; + $no_nav_bar,$bgcolor,$no_inline_link,$args)=@_; if (!$args->{'no_auto_mt_title'}) { $title = &mt($title); } @@ -4493,15 +4348,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') { @@ -4525,7 +4372,7 @@ $realm 
'. - "".$roleinfo. - '
$titleinfo $dc_info
'; - } - if ($notopbar) { + if (!$customtitle && $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); @@ -4609,14 +4432,11 @@ ENDROLE my $menu= ($no_inline_link?'' :'
'.&mt('Switch to Inline Menu Mode').''); # - if ($notitle) { - return $bodytag; - } return(< -
$upperleft$messages 
$titleinfo $dc_info $menu
+ + + + + + + + + +
$lt{'doma'}:$domform
$lt{'usr'}:$srchbysel + $srchtypesel + + $srchinsel +
+
END_BLOCK - $output .= &Apache::lonhtmlcommon::start_pick_box(). - &Apache::lonhtmlcommon::row_title($lt{'doma'}). - $domform. - &Apache::lonhtmlcommon::row_closure(). - &Apache::lonhtmlcommon::row_title($lt{'usr'}). - $srchbysel. - $srchtypesel. - ''. - $srchinsel. - &Apache::lonhtmlcommon::row_closure(1). - &Apache::lonhtmlcommon::end_pick_box(). - '
'; return $output; } @@ -7536,7 +7948,7 @@ sub get_institutional_codes { =item * sorted_slots() -Sorts an array of slot names in order of slot start time (earliest first). +Sorts an array of slot names in order of slot start time (earliest first). Inputs: @@ -7578,6 +7990,7 @@ sub sorted_slots { return @sorted; } + =pod =head1 HTTP Helpers @@ -7869,9 +8282,9 @@ sub upload_embedded { ' '. $orig_uploaded_filename.'
'; } else { - $output .= ''. + $output .= ''. &mt('View embedded file: [_1]',''. - $orig_uploaded_filename.'').'
'; + $orig_uploaded_filename.'').'
'; } } close($fh); @@ -8176,8 +8589,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()); @@ -8221,7 +8633,7 @@ sub csv_print_select_table { my ($value,$display,$defaultcol)=@{ $array_ref }; $r->print(&start_data_table_row().''.$display.''); - $r->print(''); $r->print(''); foreach my $sample (sort({$a <=> $b} keys(%{ $samples->[0] }))) { @@ -8875,11 +9287,10 @@ sub restore_settings { =item * &build_recipient_list() -Build recipient lists for five types of e-mail: +Build recipient lists for four types of e-mail: (a) Error Reports, (b) Package Updates, (c) lonstatus warnings/errors -(d) Help requests, (e) Course requests needing approval, generated by -lonerrorhandler.pm, CHECKRPMS, loncron, lonsupportreq.pm and -loncoursequeueadmin.pm respectively. +(d) Help requests, generated by +lonerrorhandler.pm, CHECKRPMS, loncron, and lonsupportreq.pm respectively. Inputs: defmail (scalar - email address of default recipient), @@ -8908,7 +9319,7 @@ sub build_recipient_list { my @contacts = ('adminemail','supportemail'); foreach my $item (@contacts) { if ($domconfig{'contacts'}{$mailing}{$item}) { - my $addr = $domconfig{'contacts'}{$item}; + my $addr = $domconfig{'contacts'}{$item}; if (!grep(/^\Q$addr\E$/,@recipients)) { push(@recipients,$addr); } @@ -9049,8 +9460,6 @@ sub extract_categories { my $trailstr; if ($name eq 'instcode') { $trailstr = &mt('Official courses (with institutional codes)'); - } elsif ($name eq 'communities') { - $trailstr = &mt('Communities'); } else { $trailstr = $name; } @@ -9161,16 +9570,14 @@ Inputs: cathash - reference to hash of categories defined for the domain (from configuration.db) -currcat - scalar with an & separated list of categories assigned to a course. - -type - scalar contains course type (Course or Community). +currcat - scalar with an & separated list of categories assigned to a course. Returns: $output (markup to be displayed) =cut sub assign_categories_table { - my ($cathash,$currcat,$type) = @_; + my ($cathash,$currcat) = @_; my $output; if (ref($cathash) eq 'HASH') { my (@cats,@trails,%allitems,%idx,@jsarray,@path,$maxdepth); @@ -9179,47 +9586,34 @@ sub assign_categories_table { if (@cats > 0) { my $itemcount = 0; if (ref($cats[0]) eq 'ARRAY') { + $output = &Apache::loncommon::start_data_table(); my @currcategories; if ($currcat ne '') { @currcategories = split('&',$currcat); } - my $table; for (my $i=0; $i<@{$cats[0]}; $i++) { my $parent = $cats[0][$i]; - next if ($parent eq 'instcode'); - if ($type eq 'Community') { - next unless ($parent eq 'communities'); - } else { - next if ($parent eq 'communities'); - } my $css_class = $itemcount%2?' class="LC_odd_row"':''; + next if ($parent eq 'instcode'); my $item = &escape($parent).'::0'; my $checked = ''; if (@currcategories > 0) { if (grep(/^\Q$item\E$/,@currcategories)) { - $checked = ' checked="checked" '; + $checked = ' checked="checked"'; } } - my $parent_title = $parent; - if ($parent eq 'communities') { - $parent_title = &mt('Communities'); - } - $table .= ''. - ''.$parent_title.''. - ''; + $output .= ''. + ''.$parent.''. + ''; my $depth = 1; push(@path,$parent); - $table .= &assign_category_rows($itemcount,\@cats,$depth,$parent,\@path,\@currcategories); + $output .= &assign_category_rows($itemcount,\@cats,$depth,$parent,\@path,\@currcategories); pop(@path); - $table .= ''; + $output .= ''; $itemcount ++; } - if ($itemcount) { - $output = &Apache::loncommon::start_data_table(). - $table. - &Apache::loncommon::end_data_table(); - } + $output .= &Apache::loncommon::end_data_table(); } } } @@ -9271,7 +9665,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"'; } } } @@ -9464,64 +9858,40 @@ sub check_clone { my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom); my $clonemsg; my $can_clone = 0; - my $lctype = lc($args->{'crstype'}); - if ($lctype ne 'community') { - $lctype = 'course'; - } + if ($clonehome eq 'no_host') { - if ($args->{'crstype'} eq 'Community') { - $clonemsg = &mt('No new community created.').$linefeed.&mt('A new community could not be cloned from the specified original - [_1] - because it is a non-existent community.',$args->{'clonecourse'}.':'.$args->{'clonedomain'}); - } else { - $clonemsg = &mt('No new course created.').$linefeed.&mt('A new course could not be cloned from the specified original - [_1] - because it is a non-existent course.',$args->{'clonecourse'}.':'.$args->{'clonedomain'}); - } + $clonemsg = &mt('No new course created.').$linefeed.&mt('A new course could not be cloned from the specified original - [_1] - because it is a non-existent course.',$args->{'clonecourse'}.':'.$args->{'clonedomain'}); } else { my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1}); - if ($args->{'crstype'} eq 'Community') { - if ($clonedesc{'type'} ne 'Community') { - $clonemsg = &mt('No new community created.').$linefeed.&mt('A new community could not be cloned from the specified original - [_1] - because it is a course not a community.',$args->{'clonecourse'}.':'.$args->{'clonedomain'}); - return ($can_clone, $clonemsg, $cloneid, $clonehome); - } - } - if (($env{'request.role.domain'} eq $args->{'clonedomain'}) && - (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'}))) { - $can_clone = 1; - } else { - my %clonehash = &Apache::lonnet::get('environment',['cloners'], - $args->{'clonedomain'},$args->{'clonecourse'}); - my @cloners = split(/,/,$clonehash{'cloners'}); + if ($env{'request.role.domain'} eq $args->{'clonedomain'}) { + $can_clone = 1; + } else { + my %clonehash = &Apache::lonnet::get('environment',['cloners'], + $args->{'clonedomain'},$args->{'clonecourse'}); + my @cloners = split(/,/,$clonehash{'cloners'}); if (grep(/^\*$/,@cloners)) { $can_clone = 1; } elsif (grep(/^\*\:\Q$args->{'ccdomain'}\E$/,@cloners)) { $can_clone = 1; } else { - my $ccrole = 'cc'; - if ($args->{'crstype'} eq 'Community') { - $ccrole = 'co'; - } - my %roleshash = - &Apache::lonnet::get_my_roles($args->{'ccuname'}, - $args->{'ccdomain'}, - 'userroles',['active'],[$ccrole], - [$args->{'clonedomain'}]); - if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':'.$ccrole}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) { - $can_clone = 1; - } elsif (&Apache::lonnet::is_course_owner($args->{'clonedomain'},$args->{'clonecourse'},$args->{'ccuname'},$args->{'ccdomain'})) { - $can_clone = 1; - } else { - if ($args->{'crstype'} eq 'Community') { - $clonemsg = &mt('No new community created.').$linefeed.&mt('The new community could not be cloned from the existing community because the new community owner ([_1]) does not have cloning rights in the existing community ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'}); - } else { - $clonemsg = &mt('No new course created.').$linefeed.&mt('The new course could not be cloned from the existing course because the new course owner ([_1]) does not have cloning rights in the existing course ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'}); - } - } - } + my %roleshash = + &Apache::lonnet::get_my_roles($args->{'ccuname'}, + $args->{'ccdomain'}, + 'userroles',['active'],['cc'], + [$args->{'clonedomain'}]); + if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':cc'}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) { + $can_clone = 1; + } else { + $clonemsg = &mt('No new course created.').$linefeed.&mt('The new course could not be cloned from the existing course because the new course owner ([_1]) does not have cloning rights in the existing course ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'}); + } + } } } return ($can_clone, $clonemsg, $cloneid, $clonehome); } sub construct_course { - my ($args,$logmsg,$courseid,$crsudom,$crsunum,$udom,$uname,$context,$cnum,$category) = @_; + my ($args,$logmsg,$courseid,$crsudom,$crsunum,$udom,$uname,$context) = @_; my $outcome; my $linefeed = '
'."\n"; if ($context eq 'auto') { @@ -9559,9 +9929,7 @@ sub construct_course { $args->{'crscode'}, $args->{'ccuname'}.':'. $args->{'ccdomain'}, - $args->{'crstype'}, - $cnum,$context,$category); - + $args->{'crstype'}); # Note: The testing routines depend on this being output; see # Utils::Course. This needs to at least be output as a comment @@ -9591,10 +9959,6 @@ sub construct_course { $cenv{'url'}=$oldcenv{'url'}; # Restore title $cenv{'description'}=$oldcenv{'description'}; -# Restore creation date, creator and creation context. - $cenv{'internal.created'}=$oldcenv{'internal.created'}; - $cenv{'internal.creator'}=$oldcenv{'internal.creator'}; - $cenv{'internal.creationcontext'}=$oldcenv{'internal.creationcontext'}; # Mark as cloned $cenv{'clonedfrom'}=$cloneid; # Need to clone grading mode @@ -9873,22 +10237,12 @@ sub course_type { sub group_term { my $crstype = &course_type(); my %names = ( - 'Course' => 'group', - 'Community' => 'group', + 'Course' => 'group', + 'Group' => 'team', ); return $names{$crstype}; } -sub course_types { - my @types = ('official','unofficial','community'); - my %typename = ( - official => 'Official course', - unofficial => 'Unofficial course', - community => 'Community', - ); - return (\@types,\%typename); -} - sub icon { my ($file)=@_; my $curfext = lc((split(/\./,$file))[-1]); @@ -9964,7 +10318,7 @@ sub compare_arrays { return @difference; } -# -------------------------------------------------------- Initliaze user login +# -------------------------------------------------------- Initialize user login sub init_user_environment { my ($r, $username, $domain, $authhost, $form, $args) = @_; my $lonids=$Apache::lonnet::perlvar{'lonIDsDir'}; @@ -10018,19 +10372,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); @@ -10048,10 +10389,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 @@ -10085,21 +10424,14 @@ 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') { - $userenv{'availabletools.'.$tool} = + $userenv{'availabletools.'.$tool} = &Apache::lonnet::usertools_access($username,$domain,$tool,'reload'); } - foreach my $crstype ('official','unofficial','community') { + foreach my $crstype ('official','unofficial') { $userenv{'canrequest.'.$crstype} = &Apache::lonnet::usertools_access($username,$domain,$crstype, 'reload','requestcourses'); @@ -10117,8 +10449,8 @@ sub init_user_environment { } untie(%disk_env); } else { - &Apache::lonnet::logthis("WARNING: ". - 'Could not create environment storage in lonauth: '.$!.''); + &Apache::lonnet::logthis("WARNING: ". + 'Could not create environment storage in lonauth: '.$!.''); return 'error: '.$!; } }