--- loncom/interface/loncommon.pm 2010/12/06 02:19:38 1.925.2.24 +++ loncom/interface/loncommon.pm 2010/03/29 13:40:03 1.963 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.925.2.24 2010/12/06 02:19:38 raeburn Exp $ +# $Id: loncommon.pm,v 1.963 2010/03/29 13:40:03 raeburn 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) } @@ -1978,16 +1971,7 @@ sub select_dom_form { ($dom eq $defdom ? 'selected="selected" ' : '').'>'.$dom; if ($showdomdesc) { if ($dom ne '') { - my $domdesc; - if ($name eq 'srchdomain') { - if ($dom =~ /^\w+ci$/) { - $domdesc = 'Faculty'; - } else { - $domdesc = 'Students'; - } - } else { - $domdesc = &Apache::lonnet::domain($dom,'description'); - } + my $domdesc = &Apache::lonnet::domain($dom,'description'); if ($domdesc ne '') { $selectdomain .= ' ('.$domdesc.')'; } @@ -2478,11 +2462,9 @@ sub authform_internal{ } $autharg = ''; - my $authtext = '[_1] Internally authenticated (with initial password [_2])'; - if ($in{'caller'} eq 'requestcrs') { - $authtext = "[_1] Students' password, if none in the uploaded file: [_2]"; - } - $result = &mt($authtext,''.$autharg); + $result = &mt + ('[_1] Internally authenticated (with initial password [_2])', + ''.$autharg); $result.="'; return $result; } @@ -3416,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].''; @@ -3431,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 { @@ -3620,10 +3687,13 @@ sub submlink { } if (!$symb) { $symb=&Apache::lonnet::symbread(); } $symb=&escape($symb); - if ($target) { $target="target=\"$target\""; } - return ''.$text.''; + if ($target) { $target=" target=\"$target\""; } + return + ''.$text.''; } ############################################## @@ -4150,16 +4220,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}; @@ -4186,6 +4279,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)) { @@ -4441,9 +4539,6 @@ 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 - =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, @@ -4461,7 +4556,7 @@ other decorations will be returned. sub bodytag { my ($title,$function,$addentries,$bodyonly,$domain,$forcereg, - $no_nav_bar,$bgcolor,$no_inline_link,$args)=@_; + $no_nav_bar,$bgcolor,$args)=@_; my $public; if ((($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public')) @@ -4483,10 +4578,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') { @@ -4496,26 +4587,14 @@ sub bodytag { # realm if ($env{'request.course.id'}) { if ($env{'request.role'} !~ /^cr/) { - if (($custommenu) && (($role eq 'cm') || ($env{'form.context'} eq 'requestcrs'))) { - undef($role); - } else { - $role = &Apache::lonnet::plaintext($role,&course_type()); - } + $role = &Apache::lonnet::plaintext($role,&course_type()); } - if (defined($role) && $env{'request.course.sec'}) { + if ($env{'request.course.sec'}) { $role .= (' 'x2).'- '.&mt('section:').' '.$env{'request.course.sec'}; - } - if ($env{'form.context'} eq 'requestcrs') { - undef($realm); - } else { - $realm = $env{'course.'.$env{'request.course.id'}.'.description'}; - } + } + $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=' '; } @@ -4554,8 +4633,6 @@ sub bodytag { $role = '('.$role.')' if $role; &get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['inhibitmenu']); - if ($env{'environment.remote'} ne 'on') { - # No Remote if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') { return $bodytag; } @@ -4566,72 +4643,7 @@ sub bodytag { # $titleinfo = &CSTR_pageheader(); #FIXME: Will be removed once all scripts have their own calls # } - my $role_selector; - if (($custommenu) && !($env{'form.context'} eq 'requestcrs') && - ($env{'request.course.id'}) && - ($env{'course.'.$env{'request.course.id'}.'.domain'} =~ /^\w+citest$/)) { - $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; - } - } - my $cid = $env{'request.course.id'}; - my %cicourses; - my $udom = $env{'user.domain'}; - my %allnums = &get_faculty_cnums(); - if (($udom ne '') && (ref($allnums{$udom}) eq 'HASH')) { - foreach my $key (%{$allnums{$udom}}) { - $cicourses{$udom.'_'.$key} = $allnums{$udom}->{$key}; - } - } - if (($custommenu && $cid && !$cicourses{$cid}) && - !($env{'form.context'} eq 'requestcrs') || - ($env{'user.domain'} =~ /^\w+citest$/)) { - my $role = 'st'; - if ($custommenu) { - $role = 'cc'; - } - my ($switcher_js,$switcher,$formname); - $formname = 'pickrole'; - my %courses = &existing_gcitest_courses($role); - my $numcourses = keys(%courses); - my $reqdcount = 0; - if ($cid) { - if ($courses{$cid}) { - $reqdcount = 1; - } - } - if ($numcourses > $reqdcount) { - $switcher = &gcitest_switcher($role,$formname,%courses); - my $current; - if ($cid) { - $current = $role.'./'.$env{'course.'.$cid.'.domain'}. - '/'.$env{'course.'.$cid.'.num'}; - } - $switcher_js = &gcitest_switcher_js($current,$numcourses,$formname); - if ($switcher_js) { - $switcher_js= <<"ENDSCRIPT"; - -ENDSCRIPT - } - } - if ($switcher) { - $switcher = $switcher_js.$switcher; - if ($role_selector) { - $role_selector .= '   '.$switcher; - } else { - $role_selector .= '
'.$switcher; - } - } - } if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) { if ($dc_info) { @@ -4641,19 +4653,13 @@ ENDSCRIPT $realm $dc_info|; return $bodytag; } - if ($env{'request.noversionuri'} eq '/adm/navmaps' && - $env{'environment.remotenavmap'} eq 'on') { - return $bodytag; - } - if ($cid && $cicourses{$cid} eq 'tutorial') { - $bodytag .= '
'; + unless ($env{'request.symb'} =~ m/\.page___\d+___/) { + $bodytag .= qq|
$name $role
|; } - - $bodytag .= qq|
$name $role $role_selector
|; $bodytag .= Apache::lonhtmlcommon::scripttag( - Apache::lonmenu::utilityfunctions('',$custommenu), 'start'); + Apache::lonmenu::utilityfunctions(), 'start'); $bodytag .= Apache::lonmenu::primary_menu(); @@ -4661,47 +4667,17 @@ ENDSCRIPT $dc_info = &dc_courseid_toggle($dc_info); } $bodytag .= qq|
$realm $dc_info
|; - if ($cid && $cicourses{$cid} eq 'tutorial') { - $bodytag .= '
'; - } #don't show menus for public users - if(!$public){ - if (($custommenu) && - ($env{'request.role'} !~ m{^st\./(\w+)citest/$match_courseid})) { - $bodytag .= &Apache::lonmenu::gci_secondary_menu(); - } elsif ($env{'request.role'} ne 'cm' || &check_for_gci_dc()) { - $bodytag .= Apache::lonmenu::secondary_menu(); - } + if (!$public){ + $bodytag .= Apache::lonmenu::secondary_menu(); $bodytag .= Apache::lonmenu::serverform(); $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end'); if ($env{'request.state'} eq 'construct') { - $bodytag .= &Apache::lonmenu::innerregister($forcereg,'', + $bodytag .= &Apache::lonmenu::innerregister($forcereg, $args->{'bread_crumbs'}); } elsif ($forcereg) { $bodytag .= &Apache::lonmenu::innerregister($forcereg); - } elsif ($custommenu && $env{'request.course.id'} && - &Apache::lonnet::allowed('mdc', $env{'request.course.id'})) { - if ((($env{'request.noversionuri'} eq '/adm/navmaps') && - ($env{'request.noversionuri'} ne 'on')) || - (($env{'request.noversionuri'} eq '/adm/coursedocs') && - (!($env{'form.context'} eq 'requestcrs'))) || - (($env{'request.noversionuri'} eq '/adm/createuser') && - (!($env{'form.context'} eq 'requestcrs'))) || - ($env{'request.noversionuri'} eq '/adm/whatsnew') || - ($env{'request.noversionuri'} eq '/cgi-bin/printout.pl') || - ($env{'request.noversionuri'} eq '/adm/printout') || - ($env{'request.noversionuri'} eq '/adm/statistics')) { - - my @advtools = &concept_test_manager(); - &Apache::lonhtmlcommon::clear_breadcrumbs(); - &Apache::lonhtmlcommon::add_breadcrumb_tool( - 'advtools',@advtools); - my $advlinks; - my $legendtext = ''.&mt('Management').''; - &Apache::lonhtmlcommon::render_advtools(\$advlinks,$legendtext); - $bodytag .= $advlinks; - } } }else{ # this is to seperate menu from content when there's no secondary @@ -4711,86 +4687,6 @@ ENDSCRIPT } 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 concept_test_manager { - my @advtools; - my %items = ( - docs => { - desc => 'Edit Test', - action => "go('/adm/coursedocs')", - tooltip => 'Assemble or modify Concept Test' - }, - cprv => { - desc => 'Enrollment/Activity', - action => "go('/adm/createuser')", - tooltip => 'Enrollment and student activity', - }, - new => { - desc => "What's New?", - action => "go('/adm/whatsnew')", - tooltip => 'Recent events/action items in Concept Test' , - }, - prnt => { - desc => 'Print Test', - action => "go('/adm/printout');", - tooltip => 'Prepare printable Concept Test', - }, - chrt => { - desc => 'Test Statistics', - action => "go('/adm/statistics');", - tooltip => 'Concept Test Statistics', - }, - rcrs => { - desc => 'Create New Test', - action => "switchpage('createtest');", - tooltip => 'Create new Concept Test', - }, - ); - my @ordered = ('docs','cprv','new','prnt','chrt','rcrs'); - foreach my $item (@ordered) { - push(@advtools, - ''. - ''.$items{$item}{tooltip}.
-                  ''. - ''.$items{$item}{desc}.''); - } - return @advtools; } sub dc_courseid_toggle { @@ -4822,22 +4718,8 @@ sub make_attr_string { delete($attr_ref->{$key}); } } - $attr_ref->{'onload'} = - &Apache::lonmenu::loadevents(). $on_load; - $attr_ref->{'onunload'}= - &Apache::lonmenu::unloadevents().$on_unload; - } - -# Accessibility font enhance - if ($env{'browser.fontenhance'} eq 'on') { - my $style; - foreach my $key (keys(%{$attr_ref})) { - if (lc($key) eq 'style') { - $style.=$attr_ref->{$key}.';'; - delete($attr_ref->{$key}); - } - } - $attr_ref->{'style'}=$style.'; font-size: x-large;'; + $attr_ref->{'onload'} = $on_load; + $attr_ref->{'onunload'}= $on_unload; } my $attr_string; @@ -4933,6 +4815,7 @@ sub standard_css { my $table_header = '#DDDDDD'; my $feedback_link_bg = '#BBBBBB'; my $lg_border_color = '#C8C8C8'; + my $button_hover = '#BF2317'; my $border = ($env{'browser.type'} eq 'explorer' || $env{'browser.type'} eq 'safari' ) ? '0 2px 0 2px' @@ -4940,6 +4823,14 @@ sub standard_css { return < td.LC_browser_file, table.LC_data_table tr > td.LC_browser_file_published { @@ -5477,23 +5374,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 { @@ -5717,10 +5614,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; } @@ -5959,56 +5852,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%; } @@ -6042,15 +5920,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 { @@ -6083,13 +5954,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, @@ -6097,7 +5961,7 @@ ol#LC_PathBreadcrumbs a:hover, ul#LC_secondary_menu a:hover, .LC_FormSectionClearButton input:hover ul.LC_TabContent li:hover a { - color:#BF2317; + color:$button_hover; text-decoration:none; } @@ -6162,14 +6026,9 @@ fieldset > legend { padding: 0 5px 0 5px; } -div.LC_page_header { - background-color: $pgbg_or_bgcolor; - margin: 0 0 1.0em 0; -} - #LC_nav_bar { float: left; - margin: 0.2em 0 0 0; + margin: 0; } #LC_realm { @@ -6186,7 +6045,7 @@ div.LC_page_header { ol.LC_primary_menu { float: right; - margin: 0.2em 0 0 0; + margin: 0; } ol#LC_PathBreadcrumbs { @@ -6201,10 +6060,10 @@ 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; } @@ -6253,14 +6112,15 @@ ul#LC_secondary_menu li a { } ul.LC_TabContent { - min-height:1.5em; + min-height:20px; } ul.LC_TabContent li { vertical-align:middle; - padding: 0 10px 0 10px; + padding: 0 16px 0 10px; background-color:$tabbg; border-bottom:solid 1px $lg_border_color; + border-right: solid 1px $font; } ul.LC_TabContent .right { @@ -6273,16 +6133,33 @@ ul.LC_TabContent li { text-decoration:none; font-size:95%; font-weight:bold; - padding-right: 16px; + min-height:20px; +} + +ul.LC_TabContent li a:hover, +ul.LC_TabContent li a:focus { + color: $button_hover; + background:none; + outline:none; +} + +ul.LC_TabContent li:hover { + color: $button_hover; + cursor:pointer; } -ul.LC_TabContent li:hover, ul.LC_TabContent li.active { + color: $font; background:#FFFFFF url(/adm/lonIcons/open.gif) no-repeat scroll right center; - border-bottom:solid 2px #FFFFFF; - padding-right: 16px; + border-bottom:solid 1px #FFFFFF; + cursor: default; } +ul.LC_TabContent li.active a { + color:$font; + background:#FFFFFF; + outline: none; +} #maincoursedoc { clear:both; } @@ -6301,6 +6178,10 @@ ul.LC_TabContentBigger li { color: #737373; } +ul.LC_TabContentBigger li.active { + position: relative; + top: 1px; +} ul.LC_TabContentBigger li a { background:url('/adm/lonIcons/tabbgleft.gif') left bottom no-repeat; @@ -6309,28 +6190,31 @@ ul.LC_TabContentBigger li a { text-align: center; display: block; text-decoration: none; + outline: none; } -ul.LC_TabContentBigger li:hover a, ul.LC_TabContentBigger li.active a { background:url('/adm/lonIcons/tabbgleft.gif') left top no-repeat; color:$font; - text-decoration: underline; } - ul.LC_TabContentBigger li b { background: url('/adm/lonIcons/tabbgright.gif') no-repeat right bottom; display: block; float: left; padding: 0 30px; + border-bottom: 1px solid $lg_border_color; +} + +ul.LC_TabContentBigger li:hover b { + color:$button_hover; } -ul.LC_TabContentBigger li:hover b, ul.LC_TabContentBigger li.active b { background:url('/adm/lonIcons/tabbgright.gif') right top no-repeat; color:$font; - border-bottom: 1px solid #FFFFFF; + border: 0; + cursor:default; } @@ -6347,7 +6231,6 @@ ol#LC_MenuBreadcrumbs, ol#LC_PathBreadcrumbs { padding-left: 10px; margin: 0; - margin: 0; height: 2.5em; /* equal to #LC_breadcrumbs line-height */ } @@ -6355,7 +6238,7 @@ ol#LC_MenuBreadcrumbs li, ol#LC_PathBreadcrumbs li, ul.LC_CourseBreadcrumbs li { display: inline; - white-space: normal; + white-space: normal; } ol#LC_MenuBreadcrumbs li a, @@ -6364,14 +6247,6 @@ ul.LC_CourseBreadcrumbs li a { font-size:90%; } -ol#LC_MenuBreadcrumbs h1 { - display: inline; - font-size: 90%; - line-height: 2.5em; - margin: 0; - padding: 0; -} - ol#LC_PathBreadcrumbs li a { text-decoration:none; font-size:100%; @@ -6549,14 +6424,6 @@ 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); } @@ -6577,10 +6444,6 @@ a#LC_content_toolbar_changefolder_toggle background-image:url(/res/adm/pages/open-all-folders.gif); } -a#LC_content_toolbar_management { - background-image:url(/res/adm/pages/navtomenu.png); -} - ul#LC_toolbar li a:hover { background-position: bottom center; } @@ -6621,7 +6484,7 @@ ul.LC_funclist { } ul.LC_funclist > li:first-child { - font-weight:bold; + font-weight:bold; margin-left:0.8em; } @@ -6645,36 +6508,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; - margin: 0.5em 0 0.5em 0; -} -#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 @@ -6728,8 +6565,8 @@ sub headtag { if (!$args->{'frameset'}) { $result .= &Apache::lonhtmlcommon::htmlareaheaders(); } - if ($args->{'force_register'}) { - $result .= &Apache::lonmenu::registerurl(1); + if ($args->{'force_register'} && $env{'request.noversionuri'} !~ m{^/res/adm/pages/}) { + $result .= Apache::lonxml::display_title(); } if (!$args->{'no_nav_bar'} && !$args->{'only_body'} @@ -6755,7 +6592,7 @@ ADDMETA $result .= ' LON-CAPA '.$title.'' .'' .$head_extra; - return $result; + return $result.''; } =pod @@ -6812,43 +6649,6 @@ sub xml_begin { =pod -=item * &endheadtag() - -Returns a uniform for LON-CAPA web pages. - -Inputs: none - -=cut - -sub endheadtag { - return ''; -} - -=pod - -=item * &head() - -Returns a uniform complete .. section for LON-CAPA web pages. - -Inputs: - -=over 4 - -$title - optional title for the page - -$head_extra - optional extra HTML to put inside the - -=back - -=cut - -sub head { - my ($title,$head_extra,$args) = @_; - return &headtag($title,$head_extra,$args).&endheadtag(); -} - -=pod - =item * &start_page() Returns a complete .. section for LON-CAPA web pages. @@ -6886,8 +6686,6 @@ $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 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 @@ -6918,7 +6716,7 @@ sub start_page { if (! exists($args->{'skip_phases'}{'head'}) ) { $result.= &xml_begin(). - &headtag($title,$head_extra,\%head_args).&endheadtag(); + &headtag($title,$head_extra,\%head_args); } if (! exists($args->{'skip_phases'}{'body'}) ) { @@ -6932,8 +6730,7 @@ sub start_page { $args->{'function'}, $args->{'add_entries'}, $args->{'only_body'}, $args->{'domain'}, $args->{'force_register'}, $args->{'no_nav_bar'}, - $args->{'bgcolor'}, $args->{'no_inline_link'}, - $args); + $args->{'bgcolor'}, $args); } } @@ -6953,7 +6750,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; } @@ -6970,37 +6768,13 @@ sub start_page { #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'}); - } elsif (exists($args->{'bread_crumbs_menulink'})) { - $result .= &Apache::lonhtmlcommon::breadcrumbs('','',$args->{'bread_crumbs_menulink'}); - } else { - $result .= &Apache::lonhtmlcommon::breadcrumbs(); + }else{ + $result .= &Apache::lonhtmlcommon::breadcrumbs(); } } return $result; } - -=pod - -=item * &head() - -Returns a complete section for LON-CAPA web pages. - -Inputs: $args - additional optional args supported are: - js_ready -> return a string ready for being used in - a javascript writeln - html_encode -> return a string ready for being used in - a html attribute - frameset -> if true will start with a - rather than - dicsussion -> if true will get discussion from - lonxml::xmlend - (you can pass the target and parser arguments - through optional 'target' and 'parser' args - to this routine) - -=cut - sub end_page { my ($args) = @_; $env{'internal.end_page'}++; @@ -7090,15 +6864,26 @@ sub simple_error_page { { my @row_count; + + sub start_data_table_count { + unshift(@row_count, 0); + return; + } + + sub end_data_table_count { + shift(@row_count); + return; + } + sub start_data_table { my ($add_class) = @_; my $css_class = (join(' ','LC_data_table',$add_class)); - unshift(@row_count,0); + &start_data_table_count(); return ''."\n"; } sub end_data_table { - shift(@row_count); + &end_data_table_count(); return '
'."\n";; } @@ -7904,9 +7689,9 @@ sub user_picker { 'whse' => "When searching by last,first you must include at least one character in the first name.", 'thfo' => "The following need to be corrected before the search can be run:", ); - my $domform = &select_dom_form($currdom,'srchdomain',undef,1); + my $domform = &select_dom_form($currdom,'srchdomain',1,1); my $srchinsel = ' \n"; @@ -7966,9 +7750,9 @@ sub user_picker { ); $new_user_create = '

' .&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.") - .'
' - .&mt('Enter a valid e-mail address as the username for the new user.').' '.&mt('Please contact the [_1]helpdesk[_2] for assistance.' - ,'','') + .' ' + .&mt('Please contact the [_1]helpdesk[_2] for assistance.' + ,'','') .'


'; } } @@ -10293,8 +10077,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 { @@ -10354,11 +10140,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; # @@ -10377,6 +10171,10 @@ 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 @@ -10623,7 +10421,7 @@ sub construct_course { $title=&mt('Syllabus'); $url='/public/'.$$crsudom.'/'.$$crsunum.'/syllabus'; } else { - $title=&mt('Navigate Contents'); + $title=&mt('Table of Contents'); $url='/adm/navmaps'; } @@ -10634,27 +10432,14 @@ 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); } ############################################################ ############################################################ +#SD +# only Community and Course, or anything else? sub course_type { my ($cid) = @_; if (!defined($cid)) { @@ -10820,15 +10605,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 @@ -10860,9 +10642,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'}; @@ -10915,60 +10694,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) = @_; @@ -11010,183 +10735,6 @@ sub clean_symb { return ($symb,$enc); } -sub needs_gci_custom { - my $custommenu; - my $numdc = &check_for_gci_dc(); - my $udom = $env{'user.domain'}; - return if ($udom eq ''); - unless ($numdc) { - my $then=$env{'user.login.time'}; - my $now = time; - my %allnums = &get_faculty_cnums(); - my $cnums = $allnums{$udom}; - return unless (ref($cnums) eq 'HASH'); - if ($env{'user.role.st./\Q$udom\E/'.$cnums->{'review'}}) { - my ($start,$end) = - split('.',$env{'user.role.st./\Q$udom\E/'.$cnums->{'review'}}); - if (((!$start) || ($start && $start <= $now)) && - ((!$end) || ($end > $now))) { - $custommenu = 1; - if ($env{'user.role.cc./\Q$udom\E/'.$cnums->{'review'}}) { - my ($ccstart,$ccend) = - split('.',$env{'user.role.cc./\Q$udom\E/'.$cnums->{'review'}}); - if (((!$start) || ($start && $start <= $now)) && - ((!$end) || ($end > $now))) { - $custommenu = ''; - } - } - } - } - } - return $custommenu; -} - -sub ci_tabs { - my ($domain) = @_; - my %tabs = ( - gci => ['review','submit','managetest','tutorial'], - slci => ['review'], - ); - return $tabs{$domain}; -} - -sub check_for_gci_dc { - my $then=$env{'user.login.time'}; - my $numdc = 0; - my @doms = &Apache::lonnet::current_machine_domains(); - foreach my $dom (@doms) { - 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 get_faculty_cnums { - my %cnums = ( - gci => { - review => '9615072b469884921gcil1', - submit => '1H96711d710194bfegcil1', - tutorial => '5422913620b814c90gcil1', - }, - slci => { - review => '4V80581c93ffc4c38gcil1', - } - ); - return %cnums; -} - -sub existing_gcitest_courses { - my ($role) = @_; - my %courses; - my $cdom = $env{'user.domain'}.'test'; - 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; -} - -sub gcitest_switcher { - my ($role,$formname,%courses) = @_; - my $output; - my %Sortby; - foreach my $course (sort(keys(%courses))) { - next unless (ref($courses{$course}) eq 'HASH'); - my $clean_title = $courses{$course}{'description'}; - $clean_title =~ s/\W+//g; - if ($clean_title eq '') { - $clean_title = $courses{$course}{'description'}; - } - push(@{$Sortby{$clean_title}},$course); - } - my @sorted_courses = sort { lc($a) cmp lc($b) } (keys(%Sortby)); - my $default; - if (@sorted_courses > 1) { - if (($env{'request.course.id'}) && ($courses{$env{'request.course.id'}})) { - $default = &mt('Switch concept test ...'); - } else { - $default = &mt('Select a concept test ...'); - } - } else { - unless (($env{'request.course.id'}) && ($courses{$env{'request.course.id'}})) { - $default = &mt('Select concept test ...'); - } - } - if ($default) { - $output = '
'. - '
'; - } - return $output; -} - -sub gcitest_switcher_js { - my ($current,$numcourses,$formname) = @_; - my $output = <<"ENDJS"; - -function courseswitcher(caller) { - var numcourses = $numcourses; - var current = '$current'; - var choice = document.$formname.newrole.options[document.$formname.newrole.selectedIndex].value; - if (choice == '') { - if (caller == 'icon') { - alert('No Concept Test selected'); - } - document.$formname.selectrole.value = ''; - return; - } - if (choice == current) { - if ((caller != 'icon') && (numcourses > 1)) { - alert('You have selected the current course.\\nPlease select a different Concept Test course'); - } - document.$formname.newrole.selectedIndex = 0; - document.$formname.selectrole.value = ''; - return; - } - document.$formname.selectrole.value = '1'; - document.$formname.submit(); - return; -} - -ENDJS - return $output; -} - -sub get_citest_map { - my ($cdom) = @_; - my %questionnaires = ( - gcitest => 'default_1261144274.sequence', - slcitest => 'default_1261144274.sequence', - ); - return $questionnaires{$cdom}; -} - =pod =back