--- loncom/interface/loncommon.pm 2010/02/26 22:48:43 1.925.2.12 +++ loncom/interface/loncommon.pm 2010/03/16 13:04:54 1.950 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.925.2.12 2010/02/26 22:48:43 raeburn Exp $ +# $Id: loncommon.pm,v 1.950 2010/03/16 13:04:54 onken Exp $ # # Copyright Michigan State University Board of Trustees # @@ -483,9 +483,9 @@ ENDAUTHORBRW sub coursebrowser_javascript { my ($domainfilter,$sec_element,$formname,$role_element,$crstype) = @_; - my $wintitle = &mt('Course Browser'); - if ($crstype ne '') { - $wintitle = &mt($crstype); + my $wintitle = 'Course_Browser'; + if ($crstype eq 'Community') { + $wintitle = 'Community_Browser'; } my $id_functions = &javascript_index_functions(); my $output = ' @@ -1127,7 +1127,7 @@ sub help_open_topic { $template.=' ' .''.&mt('Help: [_1]',$topic).''; if ($text ne "") { $template.=''; @@ -1202,12 +1202,7 @@ ENDOUTPUT sub help_open_menu { my ($topic,$component_help,$faq,$bug,$stayOnPage,$width,$height,$text) = @_; - $stayOnPage = 0 if (not defined $stayOnPage); - # only use pop-up help (stayOnPage == 0) - # if environment.remote is on (using remote control UI) - if ($env{'environment.remote'} eq 'off' ) { - $stayOnPage=1; - } + $stayOnPage = 1; my $output; if ($component_help) { if (!$text) { @@ -1228,8 +1223,8 @@ sub help_open_menu { sub top_nav_help { my ($text) = @_; $text = &mt($text); - my $stay_on_page = - ($env{'environment.remote'} eq 'off' ); + my $stay_on_page = 1; + my $link = ($stay_on_page) ? "javascript:helpMenu('display')" : "javascript:helpMenu('open')"; my $banner_link = &update_help_link(undef,undef,undef,undef,$stay_on_page); @@ -1244,10 +1239,7 @@ END sub help_menu_js { my ($text) = @_; - - my $stayOnPage = - ($env{'environment.remote'} eq 'off' ); - + my $stayOnPage = 1; my $width = 620; my $height = 600; my $helptopic=&general_help(); @@ -1304,10 +1296,7 @@ sub help_open_bug { unless ($env{'user.adv'}) { return ''; } unless ($Apache::lonnet::perlvar{'BugzillaHost'}) { return ''; } $text = "" if (not defined $text); - $stayOnPage = 0 if (not defined $stayOnPage); - if ($env{'environment.remote'} eq 'off' ) { $stayOnPage=1; - } $width = 600 if (not defined $width); $height = 600 if (not defined $height); @@ -1348,10 +1337,7 @@ sub help_open_faq { unless ($env{'user.adv'}) { return ''; } unless ($Apache::lonnet::perlvar{'FAQHost'}) { return ''; } $text = "" if (not defined $text); - $stayOnPage = 0 if (not defined $stayOnPage); - if ($env{'environment.remote'} eq 'off' ) { $stayOnPage=1; - } $width = 350 if (not defined $width); $height = 400 if (not defined $height); @@ -1719,10 +1705,13 @@ sub create_workbook { my $workbook = Spreadsheet::WriteExcel->new('/home/httpd'.$filename); if (! defined($workbook)) { $r->log_error("Error creating excel spreadsheet $filename: $!"); - $r->print('

'.&mt("Unable to create new Excel file. ". - "This error has been logged. ". - "Please alert your LON-CAPA administrator"). - '

'); + $r->print( + '

' + .&mt('Problems occurred in creating the new Excel file.') + .' '.&mt('This error has been logged.') + .' '.&mt('Please alert your LON-CAPA administrator.') + .'

' + ); return (undef); } # @@ -1762,9 +1751,13 @@ sub create_text_file { $fh = Apache::File->new('>/home/httpd'.$filename); if (! defined($fh)) { $r->log_error("Couldn't open $filename for output $!"); - $r->print(&mt('Problems occurred in creating the output file. ' - .'This error has been logged. ' - .'Please alert your LON-CAPA administrator.')); + $r->print( + '

' + .&mt('Problems occurred in creating the output file.') + .' '.&mt('This error has been logged.') + .' '.&mt('Please alert your LON-CAPA administrator.') + .'

' + ); } return ($fh,$filename) } @@ -3405,12 +3398,22 @@ sub get_previous_attempt { } $prevattempts=&start_data_table().&start_data_table_header_row(); $prevattempts.=''.&mt('History').''; + my %typeparts; + my $showsurv=&Apache::lonnet::allowed('vas',$env{'request.course.id'}); foreach my $key (sort(keys(%lasthash))) { my ($ign,@parts) = split(/\./,$key); if ($#parts > 0) { my $data=$parts[-1]; pop(@parts); - $prevattempts.=''.&mt('Part ').join('.',@parts).'
'.$data.' '; + if ($data eq 'type') { + unless ($showsurv) { + my $id = join(',',@parts); + $typeparts{$ign.'.'.$id} = $lasthash{$key}; + } + delete($lasthash{$key}); + } else { + $prevattempts.=''.&mt('Part ').join('.',@parts).'
'.$data.' '; + } } else { if ($#parts == 0) { $prevattempts.=''.$parts[0].''; @@ -3420,23 +3423,98 @@ sub get_previous_attempt { } } $prevattempts.=&end_data_table_header_row(); + my %lasthidden; if ($getattempt eq '') { for ($version=1;$version<=$returnhash{'version'};$version++) { - $prevattempts.=&start_data_table_row(). - ''.&mt('Transaction [_1]',$version).''; - foreach my $key (sort(keys(%lasthash))) { - my $value = &format_previous_attempt_value($key, - $returnhash{$version.':'.$key}); - $prevattempts.=''.$value.' '; - } - $prevattempts.=&end_data_table_row(); + my @hidden; + if (%typeparts) { + foreach my $id (keys(%typeparts)) { + if (($returnhash{$version.':'.$id.'.type'} eq 'anonsurvey') || ($returnhash{$version.':'.$id.'.type'} eq 'anonsurveycred')) { + push(@hidden,$id); + $lasthidden{$id} = 1; + } elsif ($lasthidden{$id}) { + if (exists($returnhash{$version.':'.$id.'.award'})) { + delete($lasthidden{$id}); + } + } + } + } + $prevattempts.=&start_data_table_row(). + ''.&mt('Transaction [_1]',$version).''; + if (@hidden) { + foreach my $key (sort(keys(%lasthash))) { + my $hide; + foreach my $id (@hidden) { + if ($key =~ /^\Q$id\E/) { + $hide = 1; + last; + } + } + if ($hide) { + my ($id,$data) = ($key =~ /^(.+)\.([^.]+)$/); + if (($data eq 'award') || ($data eq 'awarddetail')) { + my $value = &format_previous_attempt_value($key, + $returnhash{$version.':'.$key}); + $prevattempts.=''.$value.' '; + } else { + $prevattempts.=' '; + } + } else { + if ($key =~ /\./) { + my $value = &format_previous_attempt_value($key, + $returnhash{$version.':'.$key}); + $prevattempts.=''.$value.' '; + } else { + $prevattempts.=' '; + } + } + } + } else { + foreach my $key (sort(keys(%lasthash))) { + my $value = &format_previous_attempt_value($key, + $returnhash{$version.':'.$key}); + $prevattempts.=''.$value.' '; + } + } + $prevattempts.=&end_data_table_row(); } } + my @currhidden = keys(%lasthidden); $prevattempts.=&start_data_table_row().''.&mt('Current').''; foreach my $key (sort(keys(%lasthash))) { - my $value = &format_previous_attempt_value($key,$lasthash{$key}); - if ($key =~/$regexp$/ && (defined &$gradesub)) {$value = &$gradesub($value)} - $prevattempts.=''.$value.' '; + if (%typeparts) { + my $hidden; + foreach my $id (@currhidden) { + if ($key =~ /^\Q$id\E/) { + $hidden = 1; + last; + } + } + if ($hidden) { + my ($id,$data) = ($key =~ /^(.+)\.([^.]+)$/); + if (($data eq 'award') || ($data eq 'awarddetail')) { + my $value = &format_previous_attempt_value($key,$lasthash{$key}); + if ($key =~/$regexp$/ && (defined &$gradesub)) { + $value = &$gradesub($value); + } + $prevattempts.=''.$value.' '; + } else { + $prevattempts.=' '; + } + } else { + my $value = &format_previous_attempt_value($key,$lasthash{$key}); + if ($key =~/$regexp$/ && (defined &$gradesub)) { + $value = &$gradesub($value); + } + $prevattempts.=''.$value.' '; + } + } else { + my $value = &format_previous_attempt_value($key,$lasthash{$key}); + if ($key =~/$regexp$/ && (defined &$gradesub)) { + $value = &$gradesub($value); + } + $prevattempts.=''.$value.' '; + } } $prevattempts.= &end_data_table_row().&end_data_table(); } else { @@ -4139,16 +4217,39 @@ sub get_domainconf { if (defined($cached)) { return %{$result}; } my %domconfig = &Apache::lonnet::get_dom('configuration', - ['login','rolecolors'],$udom); + ['login','rolecolors','autoenroll'],$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') { - foreach my $img (keys(%{$domconfig{'login'}{$key}})) { - $designhash{$udom.'.login.'.$key.'_'.$img} = - $domconfig{'login'}{$key}{$img}; + 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}; + } } } else { $designhash{$udom.'.login.'.$key}=$domconfig{'login'}{$key}; @@ -4175,6 +4276,11 @@ 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)) { @@ -4430,9 +4536,9 @@ Inputs: =item * $bgcolor, used to override the bgcolor on a webpage to a specific value -=item * $no_inline_link, if true and in remote mode, don't show the - 'Switch To Inline Menu' link - +#RC =item * $no_inline_link, if true and in remote mode, don't show the +#RC 'Switch To Inline Menu' link +#RC =item * $args, optional argument valid values are no_auto_mt_title -> prevents &mt()ing the title arg inherit_jsmath -> when creating popup window in a page, @@ -4467,10 +4573,6 @@ sub bodytag { 'link' => &designparm($function.'.link',$domain),); @design{keys(%$addentries)} = @$addentries{keys(%$addentries)}; - my $custommenu; - if ($env{'environment.remote'} eq 'off') { - $custommenu = &needs_gci_custom(); - } # role and realm my ($role,$realm) = split(/\./,$env{'request.role'},2); if ($role eq 'ca') { @@ -4480,22 +4582,14 @@ sub bodytag { # realm if ($env{'request.course.id'}) { if ($env{'request.role'} !~ /^cr/) { - if (($custommenu) && ($role eq 'cm')) { - undef($role); - } else { - $role = &Apache::lonnet::plaintext($role,&course_type()); - } + $role = &Apache::lonnet::plaintext($role,&course_type()); } if ($env{'request.course.sec'}) { $role .= (' 'x2).'- '.&mt('section:').' '.$env{'request.course.sec'}; } $realm = $env{'course.'.$env{'request.course.id'}.'.description'}; } else { - if (($custommenu) && ($role eq 'cm')) { - undef($role); - } else { - $role = &Apache::lonnet::plaintext($role); - } + $role = &Apache::lonnet::plaintext($role); } if (!$realm) { $realm=' '; } @@ -4534,7 +4628,6 @@ sub bodytag { $role = '('.$role.')' if $role; &get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['inhibitmenu']); - if ($env{'environment.remote'} eq 'off') { # No Remote if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') { return $bodytag; @@ -4546,17 +4639,7 @@ sub bodytag { # $titleinfo = &CSTR_pageheader(); #FIXME: Will be removed once all scripts have their own calls # } - my $role_selector; - if (($custommenu) && ($env{'request.course.id'}) && - ($env{'course.'.$env{'request.course.id'}.'.domain'} eq 'gcitest') && - ($env{'request.role'} !~ m{^st\./gcitest/$match_courseid})) { - $role_selector = &Apache::lonmenu::roles_selector( - $env{'course.' . $env{'request.course.id'} . '.domain'}, - $env{'course.' . $env{'request.course.id'} . '.num'} ); - if ($role_selector) { - $role_selector = '
'.$role_selector; - } - } + if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) { if ($dc_info) { @@ -4567,10 +4650,12 @@ sub bodytag { return $bodytag; } - $bodytag .= qq|
$name $role $role_selector
|; + unless ($env{'request.symb'} =~ m/\.page___\d+___/) { + $bodytag .= qq|
$name $role
|; + } $bodytag .= Apache::lonhtmlcommon::scripttag( - Apache::lonmenu::utilityfunctions('',$custommenu), 'start'); + Apache::lonmenu::utilityfunctions(), 'start'); $bodytag .= Apache::lonmenu::primary_menu(); @@ -4581,12 +4666,7 @@ sub bodytag { #don't show menus for public users if($env{'user.name'} ne 'public' && $env{'user.domain'} ne 'public'){ - if (($custommenu) && - ($env{'request.role'} !~ m{^st\./gcitest/$match_courseid})) { - $bodytag .= &Apache::lonmenu::gci_secondary_menu(); - } else { - $bodytag .= Apache::lonmenu::secondary_menu(); - } + $bodytag .= Apache::lonmenu::secondary_menu(); $bodytag .= Apache::lonmenu::serverform(); $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end'); if ($env{'request.state'} eq 'construct') { @@ -4602,43 +4682,7 @@ sub bodytag { $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end'); } - #SD testing - #$bodytag .= Apache::lonmenu::menubuttons($forcereg); return $bodytag; - } - -# -# Top frame rendering, Remote is up -# - - my $imgsrc = $img; - if ($img =~ /^\/adm/) { - $imgsrc = &lonhttpdurl($img); - } - my $upperleft=''.$function.''; - - # Explicit link to get inline menu - my $menu= ($no_inline_link?'' - :''.&mt('Switch to Inline Menu Mode').''); - - if ($dc_info) { - $dc_info = qq|($dc_info)|; - } - - $bodytag .= qq|
$name $role
-
    -
  1. $menu
  2. -
$realm $dc_info
| unless $env{'form.inhibitmenu'}; - return(< -$upperleft - $messages  - -$titleinfo $dc_info $menu - - -ENDBODY } sub dc_courseid_toggle { @@ -4788,6 +4832,14 @@ sub standard_css { return < td.LC_browser_file, table.LC_data_table tr > td.LC_browser_file_published { @@ -5302,23 +5378,23 @@ table.LC_data_table tr > td.LC_roles_is } table.LC_data_table tr > td.LC_roles_future { - background: #FFFF77; + border-right: 8px solid #FFFF77; } table.LC_data_table tr > td.LC_roles_will { - background: #FFAA77; + border-right: 8px solid #FFAA77; } table.LC_data_table tr > td.LC_roles_expired { - background: #FF7777; + border-right: 8px solid #FF7777; } table.LC_data_table tr > td.LC_roles_will_not { - background: #AAFF77; + border-right: 8px solid #AAFF77; } table.LC_data_table tr > td.LC_roles_selected { - background: #11CC55; + border-right: 8px solid #11CC55; } span.LC_current_location { @@ -5542,10 +5618,6 @@ table.LC_notify_front_page td { font-size: 1.2em; } -.LC_topic_bar img { - vertical-align: bottom; -} - table.LC_course_group_status { margin: 20px; } @@ -5784,56 +5856,41 @@ div.LC_clear_float_footer { } div.LC_grade_show_user { - margin-top: 20px; - border: 1px solid black; +/* border-left: 5px solid $sidebg; */ + border-top: 5px solid #000000; + margin: 50px 0 0 0; + padding: 15px 0 5px 10px; } -div.LC_grade_user_name { - background: #DDDDEE; - border-bottom: 1px solid black; - font-weight: bold; - font-size: large; +div.LC_grade_show_user_odd_row { +/* border-left: 5px solid #000000; */ } -div.LC_grade_show_user_odd_row div.LC_grade_user_name { - background: #DDEEDD; +div.LC_grade_show_user div.LC_Box { + margin-right: 50px; } -div.LC_grade_show_problem, div.LC_grade_submissions, div.LC_grade_message_center, -div.LC_grade_info_links, -div.LC_grade_assign { +div.LC_grade_info_links { margin: 5px; 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 { +div.LC_grade_message_center_header { font-weight: bold; font-size: large; } -div.LC_grade_show_problem_problem, div.LC_grade_submissions_body, -div.LC_grade_message_center_body, -div.LC_grade_assign_body { +div.LC_grade_message_center_body { border: 1px solid black; width: 99%; background: #FFFFFF; } -span.LC_grade_check_note { - font-weight: normal; - font-size: medium; - display: inline; - position: absolute; - right: 1em; -} - table.LC_scantron_action { width: 100%; } @@ -5867,15 +5924,8 @@ div.LC_edit_problem_header_title { } table.LC_edit_problem_header_title { - font-size: larger; - font-weight: bold; width: 100%; - border-color: $pgbg; - border-style: solid; - border-width: $border; background: $tabbg; - border-collapse: collapse; - padding: 0; } div.LC_edit_problem_discards { @@ -5908,13 +5958,6 @@ div.LC_createcourse { display:none; } -/* ---- 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_primary_menu a:hover, ol#LC_MenuBreadcrumbs a:hover, @@ -5989,7 +6032,7 @@ fieldset > legend { #LC_nav_bar { float: left; - margin: 0.2em 0 0 0; + margin: 0; } #LC_realm { @@ -6006,7 +6049,7 @@ fieldset > legend { ol.LC_primary_menu { float: right; - margin: 0.2em 0 0 0; + margin: 0; } ol#LC_PathBreadcrumbs { @@ -6021,14 +6064,19 @@ ol.LC_primary_menu li { ol.LC_primary_menu li img { vertical-align: bottom; + height: 1.1em; } ol.LC_primary_menu a { - font-size: 90%; color: RGB(80, 80, 80); text-decoration: none; } +ol.LC_primary_menu a.LC_new_message { + font-weight:bold; + color: darkred; +} + ul#LC_secondary_menu { clear: both; color: $fontmenu; @@ -6096,6 +6144,7 @@ ul.LC_TabContent li.active { background:#FFFFFF url(/adm/lonIcons/open.gif) no-repeat scroll right center; border-bottom:solid 2px #FFFFFF; padding-right: 16px; + cursor:pointer; } #maincoursedoc { @@ -6162,18 +6211,14 @@ ol#LC_MenuBreadcrumbs, ol#LC_PathBreadcrumbs { padding-left: 10px; margin: 0; - list-style-position: inside; - /* SD working here - white-space: nowrap; */ + height: 2.5em; /* equal to #LC_breadcrumbs line-height */ } ol#LC_MenuBreadcrumbs li, ol#LC_PathBreadcrumbs li, ul.LC_CourseBreadcrumbs li { display: inline; - white-space: nowrap; - /* SD working here - white-space: normal; */ + white-space: normal; } ol#LC_MenuBreadcrumbs li a, @@ -6426,6 +6471,11 @@ ul.LC_funclist { padding: 0.5em 1em 0.5em 0; } +ul.LC_funclist > li:first-child { + font-weight:bold; + margin-left:0.8em; +} + ul.LC_funclist + ul.LC_funclist { /* left border as a seperator if we have more than @@ -6446,35 +6496,10 @@ ul.LC_funclist li { line-height: 150%; } -#gciheader { - float:left; - width:100%; - background:#DAE0D2 url("/gcimenu_bg.gif") repeat-x bottom; - font-size:93%; - line-height:normal; -} -#gciheader ul { - margin:0; - padding:10px 10px 0; - list-style:none; -} -#gciheader li { - float:left; - background:url("/gcimenu_left.gif") no-repeat left top; - margin:0; - padding:0 0 0 9px; -} -#gciheader a { - display:block; - background:url("/gcimenu_right.gif") no-repeat right top; - padding:5px 15px 4px 6px; -} -#gciheader #current { - background-image:url("/gcimenu_left_on.gif"); -} -#gciheader #current a { - background-image:url("/gcimenu_right_on.gif"); - padding-bottom:5px; +.ui-accordion .LC_advanced_toggle { + float: right; + font-size: 90%; + padding: 0px 4px } END @@ -6686,8 +6711,8 @@ $args - additional optional args support skip_phases -> hash ref of head -> skip the generation body -> skip all generation - no_inline_link -> if true and in remote mode, don't show the - 'Switch To Inline Menu' link +#RC no_inline_link -> if true and in remote mode, don't show the +#RC 'Switch To Inline Menu' link no_auto_mt_title -> prevent &mt()ing the title arg inherit_jsmath -> when creating popup window in a page, should it have jsmath forced on by the @@ -6753,7 +6778,8 @@ sub start_page { return $result if $args->{'only_body'}; #Breadcrumbs for Construction Space provided by &bodytag. - if (($env{'environment.remote'} eq 'off') && ($env{'request.state'} eq 'construct')) { + if ( + $env{'request.state'} eq 'construct') { return $result; } @@ -10090,8 +10116,10 @@ sub check_clone { '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; - } else { + $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 { @@ -10151,11 +10179,19 @@ sub construct_course { # if anyone ever decides to not show this, and Utils::Course::new # will need to be suitably modified. $outcome .= &mt('New LON-CAPA [_1] ID: [_2]',$crstype,$$courseid).$linefeed; + if ($$courseid =~ /^error:/) { + return (0,$outcome); + } + # # Check if created correctly # ($$crsudom,$$crsunum)= &LONCAPA::split_courseid($$courseid); my $crsuhome=&Apache::lonnet::homeserver($$crsunum,$$crsudom); + if ($crsuhome eq 'no_host') { + $outcome .= &mt('Course creation failed, unrecognized course home server.').$linefeed; + return (0,$outcome); + } $outcome .= &mt('Created on').': '.$crsuhome.$linefeed; # @@ -10431,21 +10467,6 @@ sub construct_course { $outcome .= ($fatal?$errtext:'write ok').$linefeed; } - if ($args->{'cloneroster'}) { - my ($numadded,$clisterror) = &Apache::lonclonecourse::copyroster($cloneid,$$courseid,$args->{'startaccess'},$args->{'endaccess'}); - if ($clisterror) { - $outcome .= "\0".&mt('An error occurred when copying the student roster from the old course to the new course; the error was: [_1].',$clisterror).$linefeed; - if ($numadded) { - $outcome .= &mt('Although [quant,_1,student] have received roles in the new course the roster does not report this. It is ').$linefeed; - } - } else { - if ($numadded) { - $outcome .= "\0".&mt('[quant,_1,student] copied from roster for old course to roster for new course.',$numadded).$linefeed; - } else { - $outcome .= "\0".&mt('No students have been enrolled in the new Concept Test.').' '.&mt('This is because either (a) an error occurred, or (b) there were no students with either current access or access which ended on/after the current default end date set for access to the old course.').$linefeed; - } - } - } return (1,$outcome); } @@ -10617,15 +10638,12 @@ sub init_user_environment { my %userenv = &Apache::lonnet::dump('environment',$domain,$username); my ($tmp) = keys(%userenv); if ($tmp !~ /^(con_lost|error|no_such_host)/i) { - # default remote control to off - if ($userenv{'remote'} ne 'on') { $userenv{'remote'} = 'off'; } } else { undef(%userenv); } if (($userenv{'interface'}) && (!$form->{'interface'})) { $form->{'interface'}=$userenv{'interface'}; } - $env{'environment.remote'}=$userenv{'remote'}; if ($userenv{'texengine'} eq 'ttm') { $clientmathml=1; } # --------------- Do not trust query string to be put directly into environment @@ -10657,9 +10675,6 @@ sub init_user_environment { $initial_env{"browser.localres"} = $form->{'localres'}; } - if ($public) { - $initial_env{"environment.remote"} = "off"; - } if ($form->{'interface'}) { $form->{'interface'}=~s/\W//gs; $initial_env{"browser.interface"} = $form->{'interface'}; @@ -10712,60 +10727,6 @@ sub _add_to_env { } } -sub new_roles_update { - my $rolecount = 0; - foreach my $envkey (keys(%env)) { - next unless ($envkey =~ /^user\.role\./); - $rolecount ++; - } - my $newrolecount = 0; - if (!$rolecount) { - my %userenv; - foreach my $crstype ('official','unofficial','community') { - $userenv{'canrequest.'.$crstype} = - &Apache::lonnet::usertools_access($env{'user.name'}, - $env{'user.domain'},$crstype,'reload','requestcourses'); - } - my $then=$env{'user.login.time'}; - my $refresh=time; - my (%userroles,%allroles,%allgroups,@newroles); - my %roleshash = - &Apache::lonnet::get_my_roles($env{'user.name'},$env{'user.domain'},'userroles',['active','future','previous'],undef,undef,1); - foreach my $item (keys(%roleshash)) { - my ($uname,$udom,$role,$section) = split(':',$item); - my $where = '/'.$udom.'/'.$uname; - my ($tstart,$tend) = split(':',$roleshash{$item}); - if ($section ne '') { - $where .= '/'.$section; - } - my $spec = $role.'.'.$where; - &Apache::lonnet::set_arearole($role,$where,$tstart,$tend, - $env{'user.domain'},$env{'user.name'}); - $userroles{'user.role.'.$spec} = $tstart.'.'.$tend; - $newrolecount ++; - unless (grep(/^\Q$role\E$/,@newroles)) { - push(@newroles,$role); - } - my $status = - &Apache::lonnet::curr_role_status($tstart,$tend,$refresh,$then); - if ($status eq 'active') { - &Apache::lonnet::gather_roleprivs(\%allroles,\%allgroups,\%userroles, - $where,$role,$tstart,$tend); - } - } - if (@newroles) { - my ($author,$adv) = &Apache::lonnet::set_userprivs(\%userroles,\%allroles, - \%allgroups); - &Apache::lonnet::appenv(\%userroles,[@newroles,'cm']); - $userenv{'user.adv'} = $adv; - $userenv{'user.author'} = $author; - $userenv{'user.refresh.time'} = $refresh; - } - &Apache::lonnet::appenv(\%userenv); - } - return $newrolecount; -} - # --- Get the symbolic name of a problem and the url sub get_symb { my ($request,$silent) = @_; @@ -10807,76 +10768,6 @@ sub clean_symb { return ($symb,$enc); } -sub needs_gci_custom { - my $custommenu; - my $numdc = &check_for_gci_dc(); - unless ($numdc) { - my $then=$env{'user.login.time'}; - my $now = time; - my %cnums = ( - review => '9615072b469884921gcil1', - submit => '1H96711d710194bfegcil1', - ); - if ($env{'user.role.st./gci/'.$cnums{'review'}}) { - my ($start,$end) = - split('.',$env{'user.role.st./gci/'.$cnums{'review'}}); - if (((!$start) || ($start && $start <= $now)) && - ((!$end) || ($end > $now))) { - $custommenu = 1; - if ($env{'user.role.cc./gci/'.$cnums{'review'}}) { - my ($ccstart,$ccend) = - split('.',$env{'user.role.cc./gci/'.$cnums{'review'}}); - if (((!$start) || ($start && $start <= $now)) && - ((!$end) || ($end > $now))) { - $custommenu = ''; - } - } - } - } - } - return $custommenu; -} - -sub check_for_gci_dc { - my $then=$env{'user.login.time'}; - my $numdc = 0; - foreach my $dom ('gci','gcitest') { - if ($env{'user.role.dc./'.$dom.'/'}) { - my $livedc = 1; - my ($tstart,$tend)=split(/\./,$env{'user.role.dc./'.$dom.'/'}); - if ($tstart && $tstart>$then) { $livedc = 0; } - if ($tend && $tend <$then) { $livedc = 0; } - if ($livedc) { - $numdc++; - } - } - } - return $numdc; -} - -sub existing_gcitest_courses { - my ($role) = @_; - my %courses; - my $cdom = 'gcitest'; - my $now = time; - foreach my $envkey (keys(%env)) { - my $cnum; - if ($envkey =~ m{^user\.role\.\Q$role\E\./\Q$cdom\E/($match_courseid)$}) { - $cnum = $1; - } else { - next; - } - my ($tstart,$tend) = split('.',$env{$envkey}); - if (((!$tstart) || ($tstart < $now)) && ((!$tend) || ($tend > $now))) { - my $descr = $env{'course.'.$cdom.'_'.$cnum.'.description'}; - if ($descr ne '') { - $courses{$cdom.'_'.$cnum}{'description'} = $descr; - } - } - } - return %courses; -} - =pod =back