version 1.925.2.21, 2010/12/05 16:38:37
|
version 1.972, 2010/08/07 19:23:50
|
Line 483 ENDAUTHORBRW
|
Line 483 ENDAUTHORBRW
|
|
|
sub coursebrowser_javascript { |
sub coursebrowser_javascript { |
my ($domainfilter,$sec_element,$formname,$role_element,$crstype) = @_; |
my ($domainfilter,$sec_element,$formname,$role_element,$crstype) = @_; |
my $wintitle = &mt('Course Browser'); |
my $wintitle = 'Course_Browser'; |
if ($crstype ne '') { |
if ($crstype eq 'Community') { |
$wintitle = &mt($crstype); |
$wintitle = 'Community_Browser'; |
} |
} |
my $id_functions = &javascript_index_functions(); |
my $id_functions = &javascript_index_functions(); |
my $output = ' |
my $output = ' |
Line 900 sub select_language {
|
Line 900 sub select_language {
|
$langchoices{$code} = &plainlanguagedescription($id); |
$langchoices{$code} = &plainlanguagedescription($id); |
} |
} |
} |
} |
return &select_form($selected,$name,%langchoices); |
return &select_form($selected,$name,\%langchoices); |
} |
} |
|
|
=pod |
=pod |
Line 1127 sub help_open_topic {
|
Line 1127 sub help_open_topic {
|
$template.=' <a target="_top" href="'.$link.'" title="'.$title.'">' |
$template.=' <a target="_top" href="'.$link.'" title="'.$title.'">' |
.'<img src="'.$helpicon.'" border="0"' |
.'<img src="'.$helpicon.'" border="0"' |
.' alt="'.&mt('Help: [_1]',$topic).'"' |
.' alt="'.&mt('Help: [_1]',$topic).'"' |
.' title="'.$title.'"' |
.' title="'.$title.'" style="vertical-align:middle;"' |
.' /></a>'; |
.' /></a>'; |
if ($text ne "") { |
if ($text ne "") { |
$template.='</span>'; |
$template.='</span>'; |
Line 1202 ENDOUTPUT
|
Line 1202 ENDOUTPUT
|
sub help_open_menu { |
sub help_open_menu { |
my ($topic,$component_help,$faq,$bug,$stayOnPage,$width,$height,$text) |
my ($topic,$component_help,$faq,$bug,$stayOnPage,$width,$height,$text) |
= @_; |
= @_; |
$stayOnPage = 0 if (not defined $stayOnPage); |
$stayOnPage = 1; |
# only use pop-up help (stayOnPage == 0) |
|
# if environment.remote is on (using remote control UI) |
|
if ($env{'environment.remote'} eq 'off' ) { |
|
$stayOnPage=1; |
|
} |
|
my $output; |
my $output; |
if ($component_help) { |
if ($component_help) { |
if (!$text) { |
if (!$text) { |
Line 1228 sub help_open_menu {
|
Line 1223 sub help_open_menu {
|
sub top_nav_help { |
sub top_nav_help { |
my ($text) = @_; |
my ($text) = @_; |
$text = &mt($text); |
$text = &mt($text); |
my $stay_on_page = |
my $stay_on_page = 1; |
($env{'environment.remote'} eq 'off' ); |
|
my $link = ($stay_on_page) ? "javascript:helpMenu('display')" |
my $link = ($stay_on_page) ? "javascript:helpMenu('display')" |
: "javascript:helpMenu('open')"; |
: "javascript:helpMenu('open')"; |
my $banner_link = &update_help_link(undef,undef,undef,undef,$stay_on_page); |
my $banner_link = &update_help_link(undef,undef,undef,undef,$stay_on_page); |
Line 1244 END
|
Line 1239 END
|
|
|
sub help_menu_js { |
sub help_menu_js { |
my ($text) = @_; |
my ($text) = @_; |
|
my $stayOnPage = 1; |
my $stayOnPage = |
|
($env{'environment.remote'} eq 'off' ); |
|
|
|
my $width = 620; |
my $width = 620; |
my $height = 600; |
my $height = 600; |
my $helptopic=&general_help(); |
my $helptopic=&general_help(); |
Line 1304 sub help_open_bug {
|
Line 1296 sub help_open_bug {
|
unless ($env{'user.adv'}) { return ''; } |
unless ($env{'user.adv'}) { return ''; } |
unless ($Apache::lonnet::perlvar{'BugzillaHost'}) { return ''; } |
unless ($Apache::lonnet::perlvar{'BugzillaHost'}) { return ''; } |
$text = "" if (not defined $text); |
$text = "" if (not defined $text); |
$stayOnPage = 0 if (not defined $stayOnPage); |
|
if ($env{'environment.remote'} eq 'off' ) { |
|
$stayOnPage=1; |
$stayOnPage=1; |
} |
|
$width = 600 if (not defined $width); |
$width = 600 if (not defined $width); |
$height = 600 if (not defined $height); |
$height = 600 if (not defined $height); |
|
|
Line 1348 sub help_open_faq {
|
Line 1337 sub help_open_faq {
|
unless ($env{'user.adv'}) { return ''; } |
unless ($env{'user.adv'}) { return ''; } |
unless ($Apache::lonnet::perlvar{'FAQHost'}) { return ''; } |
unless ($Apache::lonnet::perlvar{'FAQHost'}) { return ''; } |
$text = "" if (not defined $text); |
$text = "" if (not defined $text); |
$stayOnPage = 0 if (not defined $stayOnPage); |
|
if ($env{'environment.remote'} eq 'off' ) { |
|
$stayOnPage=1; |
$stayOnPage=1; |
} |
|
$width = 350 if (not defined $width); |
$width = 350 if (not defined $width); |
$height = 400 if (not defined $height); |
$height = 400 if (not defined $height); |
|
|
Line 1719 sub create_workbook {
|
Line 1705 sub create_workbook {
|
my $workbook = Spreadsheet::WriteExcel->new('/home/httpd'.$filename); |
my $workbook = Spreadsheet::WriteExcel->new('/home/httpd'.$filename); |
if (! defined($workbook)) { |
if (! defined($workbook)) { |
$r->log_error("Error creating excel spreadsheet $filename: $!"); |
$r->log_error("Error creating excel spreadsheet $filename: $!"); |
$r->print('<p>'.&mt("Unable to create new Excel file. ". |
$r->print( |
"This error has been logged. ". |
'<p class="LC_error">' |
"Please alert your LON-CAPA administrator"). |
.&mt('Problems occurred in creating the new Excel file.') |
'</p>'); |
.' '.&mt('This error has been logged.') |
|
.' '.&mt('Please alert your LON-CAPA administrator.') |
|
.'</p>' |
|
); |
return (undef); |
return (undef); |
} |
} |
# |
# |
Line 1762 sub create_text_file {
|
Line 1751 sub create_text_file {
|
$fh = Apache::File->new('>/home/httpd'.$filename); |
$fh = Apache::File->new('>/home/httpd'.$filename); |
if (! defined($fh)) { |
if (! defined($fh)) { |
$r->log_error("Couldn't open $filename for output $!"); |
$r->log_error("Couldn't open $filename for output $!"); |
$r->print(&mt('Problems occurred in creating the output file. ' |
$r->print( |
.'This error has been logged. ' |
'<p class="LC_error">' |
.'Please alert your LON-CAPA administrator.')); |
.&mt('Problems occurred in creating the output file.') |
|
.' '.&mt('This error has been logged.') |
|
.' '.&mt('Please alert your LON-CAPA administrator.') |
|
.'</p>' |
|
); |
} |
} |
return ($fh,$filename) |
return ($fh,$filename) |
} |
} |
Line 1793 sub domain_select {
|
Line 1786 sub domain_select {
|
return &multiple_select_form($name,$value,4,\%domains); |
return &multiple_select_form($name,$value,4,\%domains); |
} else { |
} else { |
$domains{'select_form_order'} = [sort {lc($a) cmp lc($b) } (keys(%domains))]; |
$domains{'select_form_order'} = [sort {lc($a) cmp lc($b) } (keys(%domains))]; |
return &select_form($name,$value,%domains); |
return &select_form($name,$value,\%domains); |
} |
} |
} |
} |
|
|
Line 1855 sub multiple_select_form {
|
Line 1848 sub multiple_select_form {
|
|
|
=pod |
=pod |
|
|
=item * &select_form($defdom,$name,%hash) |
=item * &select_form($defdom,$name,$hashref,$onchange) |
|
|
Returns a string containing a <select name='$name' size='1'> form to |
Returns a string containing a <select name='$name' size='1'> form to |
allow a user to select options from a hash option_name => displayed text. |
allow a user to select options from a ref to a hash containing: |
|
option_name => displayed text. An optional $onchange can include |
|
a javascript onchange item, e.g., onchange="this.form.submit();" |
|
|
See lonrights.pm for an example invocation and use. |
See lonrights.pm for an example invocation and use. |
|
|
=cut |
=cut |
|
|
#------------------------------------------- |
#------------------------------------------- |
sub select_form { |
sub select_form { |
my ($def,$name,%hash) = @_; |
my ($def,$name,$hashref,$onchange) = @_; |
my $selectform = "<select name=\"$name\" size=\"1\">\n"; |
return unless (ref($hashref) eq 'HASH'); |
|
if ($onchange) { |
|
$onchange = ' onchange="'.$onchange.'"'; |
|
} |
|
my $selectform = "<select name=\"$name\" size=\"1\"$onchange>\n"; |
my @keys; |
my @keys; |
if (exists($hash{'select_form_order'})) { |
if (exists($hashref->{'select_form_order'})) { |
@keys=@{$hash{'select_form_order'}}; |
@keys=@{$hashref->{'select_form_order'}}; |
} else { |
} else { |
@keys=sort(keys(%hash)); |
@keys=sort(keys(%{$hashref})); |
} |
} |
foreach my $key (@keys) { |
foreach my $key (@keys) { |
$selectform.= |
$selectform.= |
'<option value="'.&HTML::Entities::encode($key,'"<>&').'" '. |
'<option value="'.&HTML::Entities::encode($key,'"<>&').'" '. |
($key eq $def ? 'selected="selected" ' : ''). |
($key eq $def ? 'selected="selected" ' : ''). |
">".$hash{$key}."</option>\n"; |
">".$hashref->{$key}."</option>\n"; |
} |
} |
$selectform.="</select>"; |
$selectform.="</select>"; |
return $selectform; |
return $selectform; |
Line 1895 sub display_filter {
|
Line 1895 sub display_filter {
|
&mt('Filter [_1]', |
&mt('Filter [_1]', |
&select_form($env{'form.displayfilter'}, |
&select_form($env{'form.displayfilter'}, |
'displayfilter', |
'displayfilter', |
('currentfolder' => 'Current folder/page', |
{'currentfolder' => 'Current folder/page', |
'containing' => 'Containing phrase', |
'containing' => 'Containing phrase', |
'none' => 'None'))). |
'none' => 'None'})). |
'<input type="text" name="containingphrase" size="30" value="'.&HTML::Entities::encode($env{'form.containingphrase'}).'" /></span>'; |
'<input type="text" name="containingphrase" size="30" value="'.&HTML::Entities::encode($env{'form.containingphrase'}).'" /></span>'; |
} |
} |
|
|
Line 1978 sub select_dom_form {
|
Line 1978 sub select_dom_form {
|
($dom eq $defdom ? 'selected="selected" ' : '').'>'.$dom; |
($dom eq $defdom ? 'selected="selected" ' : '').'>'.$dom; |
if ($showdomdesc) { |
if ($showdomdesc) { |
if ($dom ne '') { |
if ($dom ne '') { |
my $domdesc; |
my $domdesc = &Apache::lonnet::domain($dom,'description'); |
if ($name eq 'srchdomain') { |
|
if ($dom =~ /^\w+ci$/) { |
|
$domdesc = 'Faculty'; |
|
} else { |
|
$domdesc = 'Students'; |
|
} |
|
} else { |
|
$domdesc = &Apache::lonnet::domain($dom,'description'); |
|
} |
|
if ($domdesc ne '') { |
if ($domdesc ne '') { |
$selectdomain .= ' ('.$domdesc.')'; |
$selectdomain .= ' ('.$domdesc.')'; |
} |
} |
Line 2478 sub authform_internal{
|
Line 2469 sub authform_internal{
|
} |
} |
$autharg = '<input type="password" size="10" name="intarg" value="'. |
$autharg = '<input type="password" size="10" name="intarg" value="'. |
$intarg.'" onchange="'.$jscall.'" />'; |
$intarg.'" onchange="'.$jscall.'" />'; |
my $authtext = '[_1] Internally authenticated (with initial password [_2])'; |
$result = &mt |
if ($in{'caller'} eq 'requestcrs') { |
('[_1] Internally authenticated (with initial password [_2])', |
$authtext = "[_1] Students' password, if none in the uploaded file: [_2]"; |
'<label>'.$authtype,'</label>'.$autharg); |
} |
|
$result = &mt($authtext,'<label>'.$authtype,'</label>'.$autharg); |
|
$result.="<label><input type=\"checkbox\" name=\"visible\" onclick='if (this.checked) { this.form.intarg.type=\"text\" } else { this.form.intarg.type=\"password\" }' />".&mt('Visible input').'</label>'; |
$result.="<label><input type=\"checkbox\" name=\"visible\" onclick='if (this.checked) { this.form.intarg.type=\"text\" } else { this.form.intarg.type=\"password\" }' />".&mt('Visible input').'</label>'; |
return $result; |
return $result; |
} |
} |
Line 3250 sub filemimetype {
|
Line 3239 sub filemimetype {
|
sub filecategoryselect { |
sub filecategoryselect { |
my ($name,$value)=@_; |
my ($name,$value)=@_; |
return &select_form($value,$name, |
return &select_form($value,$name, |
'' => &mt('Any category'), |
{'' => &mt('Any category'), map { $_,$_ } sort(keys(%category_extensions))}); |
map { $_,$_ } sort(keys(%category_extensions))); |
|
} |
} |
|
|
=pod |
=pod |
Line 3416 sub get_previous_attempt {
|
Line 3404 sub get_previous_attempt {
|
} |
} |
$prevattempts=&start_data_table().&start_data_table_header_row(); |
$prevattempts=&start_data_table().&start_data_table_header_row(); |
$prevattempts.='<th>'.&mt('History').'</th>'; |
$prevattempts.='<th>'.&mt('History').'</th>'; |
|
my %typeparts; |
|
my $showsurv=&Apache::lonnet::allowed('vas',$env{'request.course.id'}); |
foreach my $key (sort(keys(%lasthash))) { |
foreach my $key (sort(keys(%lasthash))) { |
my ($ign,@parts) = split(/\./,$key); |
my ($ign,@parts) = split(/\./,$key); |
if ($#parts > 0) { |
if ($#parts > 0) { |
my $data=$parts[-1]; |
my $data=$parts[-1]; |
pop(@parts); |
pop(@parts); |
$prevattempts.='<th>'.&mt('Part ').join('.',@parts).'<br />'.$data.' </th>'; |
if ($data eq 'type') { |
|
unless ($showsurv) { |
|
my $id = join(',',@parts); |
|
$typeparts{$ign.'.'.$id} = $lasthash{$key}; |
|
} |
|
delete($lasthash{$key}); |
|
} else { |
|
$prevattempts.='<th>'.&mt('Part ').join('.',@parts).'<br />'.$data.' </th>'; |
|
} |
} else { |
} else { |
if ($#parts == 0) { |
if ($#parts == 0) { |
$prevattempts.='<th>'.$parts[0].'</th>'; |
$prevattempts.='<th>'.$parts[0].'</th>'; |
Line 3431 sub get_previous_attempt {
|
Line 3429 sub get_previous_attempt {
|
} |
} |
} |
} |
$prevattempts.=&end_data_table_header_row(); |
$prevattempts.=&end_data_table_header_row(); |
|
my %lasthidden; |
if ($getattempt eq '') { |
if ($getattempt eq '') { |
for ($version=1;$version<=$returnhash{'version'};$version++) { |
for ($version=1;$version<=$returnhash{'version'};$version++) { |
$prevattempts.=&start_data_table_row(). |
my @hidden; |
'<td>'.&mt('Transaction [_1]',$version).'</td>'; |
if (%typeparts) { |
foreach my $key (sort(keys(%lasthash))) { |
foreach my $id (keys(%typeparts)) { |
my $value = &format_previous_attempt_value($key, |
if (($returnhash{$version.':'.$id.'.type'} eq 'anonsurvey') || ($returnhash{$version.':'.$id.'.type'} eq 'anonsurveycred')) { |
$returnhash{$version.':'.$key}); |
push(@hidden,$id); |
$prevattempts.='<td>'.$value.' </td>'; |
$lasthidden{$id} = 1; |
} |
} elsif ($lasthidden{$id}) { |
$prevattempts.=&end_data_table_row(); |
if (exists($returnhash{$version.':'.$id.'.award'})) { |
|
delete($lasthidden{$id}); |
|
} |
|
} |
|
} |
|
} |
|
$prevattempts.=&start_data_table_row(). |
|
'<td>'.&mt('Transaction [_1]',$version).'</td>'; |
|
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.='<td>'.$value.' </td>'; |
|
} else { |
|
$prevattempts.='<td> </td>'; |
|
} |
|
} else { |
|
if ($key =~ /\./) { |
|
my $value = &format_previous_attempt_value($key, |
|
$returnhash{$version.':'.$key}); |
|
$prevattempts.='<td>'.$value.' </td>'; |
|
} else { |
|
$prevattempts.='<td> </td>'; |
|
} |
|
} |
|
} |
|
} else { |
|
foreach my $key (sort(keys(%lasthash))) { |
|
my $value = &format_previous_attempt_value($key, |
|
$returnhash{$version.':'.$key}); |
|
$prevattempts.='<td>'.$value.' </td>'; |
|
} |
|
} |
|
$prevattempts.=&end_data_table_row(); |
} |
} |
} |
} |
|
my @currhidden = keys(%lasthidden); |
$prevattempts.=&start_data_table_row().'<td>'.&mt('Current').'</td>'; |
$prevattempts.=&start_data_table_row().'<td>'.&mt('Current').'</td>'; |
foreach my $key (sort(keys(%lasthash))) { |
foreach my $key (sort(keys(%lasthash))) { |
my $value = &format_previous_attempt_value($key,$lasthash{$key}); |
if (%typeparts) { |
if ($key =~/$regexp$/ && (defined &$gradesub)) {$value = &$gradesub($value)} |
my $hidden; |
$prevattempts.='<td>'.$value.' </td>'; |
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.='<td>'.$value.' </td>'; |
|
} else { |
|
$prevattempts.='<td> </td>'; |
|
} |
|
} else { |
|
my $value = &format_previous_attempt_value($key,$lasthash{$key}); |
|
if ($key =~/$regexp$/ && (defined &$gradesub)) { |
|
$value = &$gradesub($value); |
|
} |
|
$prevattempts.='<td>'.$value.' </td>'; |
|
} |
|
} else { |
|
my $value = &format_previous_attempt_value($key,$lasthash{$key}); |
|
if ($key =~/$regexp$/ && (defined &$gradesub)) { |
|
$value = &$gradesub($value); |
|
} |
|
$prevattempts.='<td>'.$value.' </td>'; |
|
} |
} |
} |
$prevattempts.= &end_data_table_row().&end_data_table(); |
$prevattempts.= &end_data_table_row().&end_data_table(); |
} else { |
} else { |
Line 3620 sub submlink {
|
Line 3693 sub submlink {
|
} |
} |
if (!$symb) { $symb=&Apache::lonnet::symbread(); } |
if (!$symb) { $symb=&Apache::lonnet::symbread(); } |
$symb=&escape($symb); |
$symb=&escape($symb); |
if ($target) { $target="target=\"$target\""; } |
if ($target) { $target=" target=\"$target\""; } |
return '<a href="/adm/grades?&command=submission&'. |
return |
'symb='.$symb.'&student='.$uname. |
'<a href="/adm/grades?command=submission'. |
'&userdom='.$udom.'" '.$target.'>'.$text.'</a>'; |
'&symb='.$symb. |
|
'&student='.$uname. |
|
'&userdom='.$udom.'"'. |
|
$target.'>'.$text.'</a>'; |
} |
} |
############################################## |
############################################## |
|
|
Line 4150 sub get_domainconf {
|
Line 4226 sub get_domainconf {
|
if (defined($cached)) { return %{$result}; } |
if (defined($cached)) { return %{$result}; } |
|
|
my %domconfig = &Apache::lonnet::get_dom('configuration', |
my %domconfig = &Apache::lonnet::get_dom('configuration', |
['login','rolecolors'],$udom); |
['login','rolecolors','autoenroll'],$udom); |
my (%designhash,%legacy); |
my (%designhash,%legacy); |
if (keys(%domconfig) > 0) { |
if (keys(%domconfig) > 0) { |
if (ref($domconfig{'login'}) eq 'HASH') { |
if (ref($domconfig{'login'}) eq 'HASH') { |
if (keys(%{$domconfig{'login'}})) { |
if (keys(%{$domconfig{'login'}})) { |
foreach my $key (keys(%{$domconfig{'login'}})) { |
foreach my $key (keys(%{$domconfig{'login'}})) { |
if (ref($domconfig{'login'}{$key}) eq 'HASH') { |
if (ref($domconfig{'login'}{$key}) eq 'HASH') { |
foreach my $img (keys(%{$domconfig{'login'}{$key}})) { |
if ($key eq 'loginvia') { |
$designhash{$udom.'.login.'.$key.'_'.$img} = |
if (ref($domconfig{'login'}{'loginvia'}) eq 'HASH') { |
$domconfig{'login'}{$key}{$img}; |
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 { |
} else { |
$designhash{$udom.'.login.'.$key}=$domconfig{'login'}{$key}; |
$designhash{$udom.'.login.'.$key}=$domconfig{'login'}{$key}; |
Line 4186 sub get_domainconf {
|
Line 4285 sub get_domainconf {
|
} else { |
} else { |
$legacy{'rolecolors'} = 1; |
$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) { |
if (keys(%legacy) > 0) { |
my %legacyhash = &get_legacy_domconf($udom); |
my %legacyhash = &get_legacy_domconf($udom); |
foreach my $item (keys(%legacyhash)) { |
foreach my $item (keys(%legacyhash)) { |
Line 4441 Inputs:
|
Line 4545 Inputs:
|
|
|
=item * $bgcolor, used to override the bgcolor on a webpage to a specific value |
=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 |
=item * $args, optional argument valid values are |
no_auto_mt_title -> prevents &mt()ing the title arg |
no_auto_mt_title -> prevents &mt()ing the title arg |
inherit_jsmath -> when creating popup window in a page, |
inherit_jsmath -> when creating popup window in a page, |
Line 4461 other decorations will be returned.
|
Line 4562 other decorations will be returned.
|
|
|
sub bodytag { |
sub bodytag { |
my ($title,$function,$addentries,$bodyonly,$domain,$forcereg, |
my ($title,$function,$addentries,$bodyonly,$domain,$forcereg, |
$no_nav_bar,$bgcolor,$no_inline_link,$args)=@_; |
$no_nav_bar,$bgcolor,$args)=@_; |
|
|
my $public; |
my $public; |
if ((($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public')) |
if ((($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public')) |
Line 4483 sub bodytag {
|
Line 4584 sub bodytag {
|
'link' => &designparm($function.'.link',$domain),); |
'link' => &designparm($function.'.link',$domain),); |
@design{keys(%$addentries)} = @$addentries{keys(%$addentries)}; |
@design{keys(%$addentries)} = @$addentries{keys(%$addentries)}; |
|
|
my $custommenu; |
|
if ($env{'environment.remote'} eq 'off') { |
|
$custommenu = &needs_gci_custom(); |
|
} |
|
# role and realm |
# role and realm |
my ($role,$realm) = split(/\./,$env{'request.role'},2); |
my ($role,$realm) = split(/\./,$env{'request.role'},2); |
if ($role eq 'ca') { |
if ($role eq 'ca') { |
Line 4496 sub bodytag {
|
Line 4593 sub bodytag {
|
# realm |
# realm |
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
if ($env{'request.role'} !~ /^cr/) { |
if ($env{'request.role'} !~ /^cr/) { |
if (($custommenu) && (($role eq 'cm') || ($env{'form.context'} eq 'requestcrs'))) { |
$role = &Apache::lonnet::plaintext($role,&course_type()); |
undef($role); |
|
} else { |
|
$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'}; |
$role .= (' 'x2).'- '.&mt('section:').' '.$env{'request.course.sec'}; |
} |
} |
if ($env{'form.context'} eq 'requestcrs') { |
$realm = $env{'course.'.$env{'request.course.id'}.'.description'}; |
undef($realm); |
|
} else { |
|
$realm = $env{'course.'.$env{'request.course.id'}.'.description'}; |
|
} |
|
} else { |
} else { |
if (($custommenu) && ($role eq 'cm')) { |
$role = &Apache::lonnet::plaintext($role); |
undef($role); |
|
} else { |
|
$role = &Apache::lonnet::plaintext($role); |
|
} |
|
} |
} |
|
|
if (!$realm) { $realm=' '; } |
if (!$realm) { $realm=' '; } |
# Set messages |
|
my $messages=&domainlogo($domain); |
|
|
|
my $extra_body_attr = &make_attr_string($forcereg,\%design); |
my $extra_body_attr = &make_attr_string($forcereg,\%design); |
|
|
Line 4554 sub bodytag {
|
Line 4637 sub bodytag {
|
$role = '<span class="LC_nobreak">('.$role.')</span>' if $role; |
$role = '<span class="LC_nobreak">('.$role.')</span>' if $role; |
&get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['inhibitmenu']); |
&get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['inhibitmenu']); |
|
|
if ($env{'environment.remote'} ne 'on') { |
|
# No Remote |
|
if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') { |
if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') { |
return $bodytag; |
return $bodytag; |
} |
} |
Line 4566 sub bodytag {
|
Line 4647 sub bodytag {
|
# $titleinfo = &CSTR_pageheader(); #FIXME: Will be removed once all scripts have their own calls |
# $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 = '<br />'.$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"; |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
|
|
$switcher_js |
|
|
|
// ]]> |
|
</script> |
|
ENDSCRIPT |
|
} |
|
} |
|
if ($switcher) { |
|
$switcher = $switcher_js.$switcher; |
|
if ($role_selector) { |
|
$role_selector .= ' '.$switcher; |
|
} else { |
|
$role_selector .= '<br />'.$switcher; |
|
} |
|
} |
|
} |
|
|
|
if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) { |
if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) { |
if ($dc_info) { |
if ($dc_info) { |
Line 4641 ENDSCRIPT
|
Line 4657 ENDSCRIPT
|
<em>$realm</em> $dc_info</div>|; |
<em>$realm</em> $dc_info</div>|; |
return $bodytag; |
return $bodytag; |
} |
} |
if ($env{'request.noversionuri'} eq '/adm/navmaps' && |
|
$env{'environment.remotenavmap'} eq 'on') { |
|
return $bodytag; |
|
} |
|
|
|
if ($cid && $cicourses{$cid} eq 'tutorial') { |
unless ($env{'request.symb'} =~ m/\.page___\d+___/) { |
$bodytag .= '<div class="LC_page_header">'; |
$bodytag .= qq|<div id="LC_nav_bar">$name $role</div>|; |
} |
} |
|
|
$bodytag .= qq|<div id="LC_nav_bar">$name $role $role_selector</div>|; |
|
|
|
$bodytag .= Apache::lonhtmlcommon::scripttag( |
$bodytag .= Apache::lonhtmlcommon::scripttag( |
Apache::lonmenu::utilityfunctions('',$custommenu), 'start'); |
Apache::lonmenu::utilityfunctions(), 'start'); |
|
|
$bodytag .= Apache::lonmenu::primary_menu(); |
$bodytag .= Apache::lonmenu::primary_menu(); |
|
|
Line 4661 ENDSCRIPT
|
Line 4671 ENDSCRIPT
|
$dc_info = &dc_courseid_toggle($dc_info); |
$dc_info = &dc_courseid_toggle($dc_info); |
} |
} |
$bodytag .= qq|<div id="LC_realm">$realm $dc_info</div>|; |
$bodytag .= qq|<div id="LC_realm">$realm $dc_info</div>|; |
if ($cid && $cicourses{$cid} eq 'tutorial') { |
|
$bodytag .= '</div>'; |
|
} |
|
|
|
#don't show menus for public users |
#don't show menus for public users |
if(!$public){ |
if (!$public){ |
if (($custommenu) && |
$bodytag .= Apache::lonmenu::secondary_menu(); |
($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(); |
|
} |
|
$bodytag .= Apache::lonmenu::serverform(); |
$bodytag .= Apache::lonmenu::serverform(); |
$bodytag .= Apache::lonhtmlcommon::scripttag('', 'end'); |
$bodytag .= Apache::lonhtmlcommon::scripttag('', 'end'); |
if ($env{'request.state'} eq 'construct') { |
if ($env{'request.state'} eq 'construct') { |
$bodytag .= &Apache::lonmenu::innerregister($forcereg,'', |
$bodytag .= &Apache::lonmenu::innerregister($forcereg, |
$args->{'bread_crumbs'}); |
$args->{'bread_crumbs'}); |
} elsif ($forcereg) { |
} elsif ($forcereg) { |
$bodytag .= &Apache::lonmenu::innerregister($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 = '<a class="LC_menubuttons_link" href="/adm/menu">'.&mt('Management').'</a>'; |
|
&Apache::lonhtmlcommon::render_advtools(\$advlinks,$legendtext); |
|
$bodytag .= $advlinks; |
|
} |
|
} |
} |
}else{ |
}else{ |
# this is to seperate menu from content when there's no secondary |
# this is to seperate menu from content when there's no secondary |
Line 4711 ENDSCRIPT
|
Line 4691 ENDSCRIPT
|
} |
} |
|
|
return $bodytag; |
return $bodytag; |
} |
|
|
|
# |
|
# Top frame rendering, Remote is up |
|
# |
|
|
|
my $imgsrc = $img; |
|
if ($img =~ /^\/adm/) { |
|
$imgsrc = &lonhttpdurl($img); |
|
} |
|
my $upperleft='<img src="'.$imgsrc.'" alt="'.$function.'" />'; |
|
|
|
# Explicit link to get inline menu |
|
my $menu= ($no_inline_link?'' |
|
:'<a href="/adm/remote?action=collapse" target="_top">'.&mt('Switch to Inline Menu Mode').'</a>'); |
|
|
|
if ($dc_info) { |
|
$dc_info = qq|<span class="LC_cusr_subheading">($dc_info)</span>|; |
|
} |
|
|
|
$bodytag .= qq|<div id="LC_nav_bar">$name $role</div> |
|
<ol class="LC_primary_menu LC_right"> |
|
<li>$menu</li> |
|
</ol><div id="LC_realm"> $realm $dc_info</div>| unless $env{'form.inhibitmenu'}; |
|
return(<<ENDBODY); |
|
$bodytag |
|
<table id="LC_title_bar" class="LC_with_remote"> |
|
<tr><td>$upperleft</td> |
|
<td>$messages </td> |
|
</tr> |
|
<tr><td>$titleinfo $dc_info $menu</td> |
|
</tr> |
|
</table> |
|
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, |
|
'<a title="'.$items{$item}{tooltip}.'" class="LC_menubuttons_link" href="javascript:'. |
|
$items{$item}{action}.';">'. |
|
'<img src="'.'/res/adm/pages/'.$item.'22.png" alt="'.$items{$item}{tooltip}. |
|
'" border="0" class="LC_icon" />'. |
|
'<span class="LC_menubuttons_inline_text">'.$items{$item}{desc}.'</span></a>'); |
|
} |
|
return @advtools; |
|
} |
} |
|
|
sub dc_courseid_toggle { |
sub dc_courseid_toggle { |
Line 4822 sub make_attr_string {
|
Line 4722 sub make_attr_string {
|
delete($attr_ref->{$key}); |
delete($attr_ref->{$key}); |
} |
} |
} |
} |
$attr_ref->{'onload'} = |
$attr_ref->{'onload'} = $on_load; |
&Apache::lonmenu::loadevents(). $on_load; |
$attr_ref->{'onunload'}= $on_unload; |
$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;'; |
|
} |
} |
|
|
my $attr_string; |
my $attr_string; |
Line 4911 sub standard_css {
|
Line 4797 sub standard_css {
|
my $vlink = &designparm($function.'.vlink', $domain); |
my $vlink = &designparm($function.'.vlink', $domain); |
my $link = &designparm($function.'.link', $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 $sans = 'Verdana,Arial,Helvetica,sans-serif'; |
my $mono = 'monospace'; |
my $mono = 'monospace'; |
my $data_table_head = $sidebg; |
my $data_table_head = $sidebg; |
Line 4933 sub standard_css {
|
Line 4815 sub standard_css {
|
my $table_header = '#DDDDDD'; |
my $table_header = '#DDDDDD'; |
my $feedback_link_bg = '#BBBBBB'; |
my $feedback_link_bg = '#BBBBBB'; |
my $lg_border_color = '#C8C8C8'; |
my $lg_border_color = '#C8C8C8'; |
|
my $button_hover = '#BF2317'; |
|
|
my $border = ($env{'browser.type'} eq 'explorer' || |
my $border = ($env{'browser.type'} eq 'explorer' || |
$env{'browser.type'} eq 'safari' ) ? '0 2px 0 2px' |
$env{'browser.type'} eq 'safari' ) ? '0 2px 0 2px' |
Line 4940 sub standard_css {
|
Line 4823 sub standard_css {
|
|
|
|
|
return <<END; |
return <<END; |
|
|
|
/* needed for iframe to allow 100% height in FF */ |
|
body, html { |
|
margin: 0; |
|
padding: 0 0.5%; |
|
height: 99%; /* to avoid scrollbars */ |
|
} |
|
|
body { |
body { |
font-family: $sans; |
font-family: $sans; |
line-height:130%; |
line-height:130%; |
Line 4947 body {
|
Line 4838 body {
|
color:$font; |
color:$font; |
} |
} |
|
|
a:focus { |
a:focus, |
|
a:focus img { |
color: red; |
color: red; |
background: yellow; |
background: yellow; |
} |
} |
Line 4964 form, .inline {
|
Line 4856 form, .inline {
|
vertical-align:middle; |
vertical-align:middle; |
} |
} |
|
|
/* just for tests */ |
|
.LC_400Box { |
.LC_400Box { |
width:400px; |
width:400px; |
} |
} |
/* end */ |
|
|
.LC_iframecontainer { |
|
width: 98%; |
|
margin: 0; |
|
position: fixed; |
|
top: 8.5em; |
|
bottom: 0; |
|
} |
|
|
|
.LC_iframecontainer iframe{ |
|
border: none; |
|
width: 100%; |
|
height: 100%; |
|
} |
|
|
.LC_filename { |
.LC_filename { |
font-family: $mono; |
font-family: $mono; |
Line 5082 table#LC_title_bar {
|
Line 4986 table#LC_title_bar {
|
} |
} |
|
|
table#LC_title_bar, |
table#LC_title_bar, |
table.LC_breadcrumbs, |
table.LC_breadcrumbs, /* obsolete? */ |
table#LC_title_bar.LC_with_remote { |
table#LC_title_bar.LC_with_remote { |
width: 100%; |
width: 100%; |
border-color: $pgbg; |
border-color: $pgbg; |
Line 5116 ul.LC_breadcrumb_tools_outerlist li {
|
Line 5020 ul.LC_breadcrumb_tools_outerlist li {
|
float: right; |
float: right; |
} |
} |
|
|
div.LC_GCI_Menu { |
|
width:900px; |
|
} |
|
|
|
div.LC_GCI_Menu:after { |
|
content:''; |
|
display:block; |
|
clear:both; |
|
} |
|
|
|
div.LC_GCI_Menu_left { |
|
float:left; |
|
width:400px; |
|
} |
|
|
|
div.LC_GCI_Menu_right { |
|
float:left; |
|
width:400px;; |
|
} |
|
|
|
dl.LC_GCI_Menu { |
|
width:300px; |
|
float:left; |
|
margin-right:2em; |
|
} |
|
|
|
dl.LC_GCI_Menu dt { |
|
font-weight: bold; |
|
font-size:0.9em; |
|
margin-bottom:0.7em; |
|
} |
|
|
|
dl.LC_GCI_Menu dt a { |
|
color: $font; |
|
} |
|
|
|
dl.LC_GCI_Menu dd { |
|
font-size:0.8em; |
|
margin:0 0 2em 0; |
|
padding-left:4.5em; |
|
line-height:1.5em; |
|
background:none no-repeat left top; |
|
} |
|
|
|
table#LC_title_bar td { |
table#LC_title_bar td { |
background: $tabbg; |
background: $tabbg; |
} |
} |
Line 5170 table#LC_menubuttons img {
|
Line 5030 table#LC_menubuttons img {
|
|
|
.LC_breadcrumbs_component { |
.LC_breadcrumbs_component { |
float: right; |
float: right; |
margin: 0.25em 1em; |
margin: 0 1em; |
} |
} |
.LC_breadcrumbs_component img { |
.LC_breadcrumbs_component img { |
vertical-align: middle; |
vertical-align: middle; |
Line 5192 td.LC_table_cell_checkbox {
|
Line 5052 td.LC_table_cell_checkbox {
|
overflow: hidden; |
overflow: hidden; |
margin: 0; |
margin: 0; |
padding: 0; |
padding: 0; |
text-align: left; |
|
} |
|
|
|
/* Preliminary fix to hide breadcrumbs inside remote control window */ |
|
#LC_remote #LC_breadcrumbs { |
|
display:none; |
|
} |
} |
|
|
#LC_head_subbox { |
#LC_head_subbox { |
clear:both; |
clear:both; |
background: #F8F8F8; /* $sidebg; */ |
background: #F8F8F8; /* $sidebg; */ |
border: 1px solid $sidebg; |
border: 1px solid $sidebg; |
margin: 0 0 0 0; |
margin: 0 0 10px 0; |
|
padding: 3px; |
} |
} |
|
|
.LC_fontsize_medium { |
.LC_fontsize_medium { |
Line 5221 td.LC_table_cell_checkbox {
|
Line 5076 td.LC_table_cell_checkbox {
|
padding-left:3px; |
padding-left:3px; |
} |
} |
|
|
|
.LC_menubuttons_inline_text img{ |
|
vertical-align: middle; |
|
} |
|
|
|
li.LC_menubuttons_inline_text img,a { |
|
cursor:pointer; |
|
} |
|
|
.LC_menubuttons_link { |
.LC_menubuttons_link { |
text-decoration: none; |
text-decoration: none; |
} |
} |
Line 5240 td.LC_menubuttons_text {
|
Line 5103 td.LC_menubuttons_text {
|
background: $tabbg; |
background: $tabbg; |
} |
} |
|
|
table.LC_data_table, |
table.LC_data_table { |
table.LC_mail_list { |
|
border: 1px solid #000000; |
border: 1px solid #000000; |
border-collapse: separate; |
border-collapse: separate; |
border-spacing: 1px; |
border-spacing: 1px; |
Line 5267 table.LC_nested {
|
Line 5129 table.LC_nested {
|
width: 100%; |
width: 100%; |
} |
} |
|
|
|
.ui-accordion, |
|
.ui-accordion table.LC_data_table, |
|
.ui-accordion table.LC_nested_outer{ |
|
border: 0px; |
|
border-spacing: 0px; |
|
margin: 3px; |
|
} |
|
|
table.LC_data_table tr th, |
table.LC_data_table tr th, |
table.LC_calendar tr th, |
table.LC_calendar tr th, |
table.LC_mail_list tr th, |
|
table.LC_prior_tries tr th, |
table.LC_prior_tries tr th, |
table.LC_innerpickbox tr th { |
table.LC_innerpickbox tr th { |
font-weight: bold; |
font-weight: bold; |
Line 5322 table.LC_data_table tr td.LC_leftcol_hea
|
Line 5191 table.LC_data_table tr td.LC_leftcol_hea
|
|
|
table.LC_data_table tr.LC_empty_row td, |
table.LC_data_table tr.LC_empty_row td, |
table.LC_nested tr.LC_empty_row td { |
table.LC_nested tr.LC_empty_row td { |
background-color: #FFFFFF; |
|
font-weight: bold; |
font-weight: bold; |
font-style: italic; |
font-style: italic; |
text-align: center; |
text-align: center; |
padding: 8px; |
padding: 8px; |
} |
} |
|
|
|
table.LC_data_table tr.LC_empty_row td { |
|
background-color: $sidebg; |
|
} |
|
|
|
table.LC_nested tr.LC_empty_row td { |
|
background-color: #FFFFFF; |
|
} |
|
|
table.LC_caption { |
table.LC_caption { |
} |
} |
|
|
Line 5376 table.LC_nested tr td.LC_right_item {
|
Line 5252 table.LC_nested tr td.LC_right_item {
|
text-align: right; |
text-align: right; |
} |
} |
|
|
|
.ui-accordion table.LC_nested tr.LC_odd_row td.LC_left_item, |
|
.ui-accordion table.LC_nested tr.LC_even_row td.LC_left_item { |
|
text-align: right; |
|
width: 40%; |
|
padding-right:10px; |
|
vertical-align: top; |
|
padding: 5px; |
|
} |
|
|
|
.ui-accordion table.LC_nested tr.LC_odd_row td.LC_right_item, |
|
.ui-accordion table.LC_nested tr.LC_even_row td.LC_right_item { |
|
text-align: left; |
|
width: 60%; |
|
padding: 2px 4px; |
|
} |
|
|
table.LC_nested tr.LC_odd_row td { |
table.LC_nested tr.LC_odd_row td { |
background-color: #EEEEEE; |
background-color: #EEEEEE; |
} |
} |
Line 5417 table.LC_calendar tr td.LC_calendar_day_
|
Line 5309 table.LC_calendar tr td.LC_calendar_day_
|
background-color: $data_table_highlight; |
background-color: $data_table_highlight; |
} |
} |
|
|
table.LC_mail_list tr.LC_mail_new { |
table.LC_data_table tr td.LC_mail_new { |
background-color: $mail_new; |
background-color: $mail_new; |
} |
} |
|
|
table.LC_mail_list tr.LC_mail_new:hover { |
table.LC_data_table tr.LC_mail_new:hover { |
background-color: $mail_new_hover; |
background-color: $mail_new_hover; |
} |
} |
|
|
table.LC_mail_list tr.LC_mail_read { |
table.LC_data_table tr td.LC_mail_read { |
background-color: $mail_read; |
background-color: $mail_read; |
} |
} |
|
|
table.LC_mail_list tr.LC_mail_read:hover { |
/* |
|
table.LC_data_table tr.LC_mail_read:hover { |
background-color: $mail_read_hover; |
background-color: $mail_read_hover; |
} |
} |
|
*/ |
|
|
table.LC_mail_list tr.LC_mail_replied { |
table.LC_data_table tr td.LC_mail_replied { |
background-color: $mail_replied; |
background-color: $mail_replied; |
} |
} |
|
|
table.LC_mail_list tr.LC_mail_replied:hover { |
/* |
|
table.LC_data_table tr.LC_mail_replied:hover { |
background-color: $mail_replied_hover; |
background-color: $mail_replied_hover; |
} |
} |
|
*/ |
|
|
table.LC_mail_list tr.LC_mail_other { |
table.LC_data_table tr td.LC_mail_other { |
background-color: $mail_other; |
background-color: $mail_other; |
} |
} |
|
|
table.LC_mail_list tr.LC_mail_other:hover { |
/* |
|
table.LC_data_table tr.LC_mail_other:hover { |
background-color: $mail_other_hover; |
background-color: $mail_other_hover; |
} |
} |
|
*/ |
|
|
table.LC_data_table tr > td.LC_browser_file, |
table.LC_data_table tr > td.LC_browser_file, |
table.LC_data_table tr > td.LC_browser_file_published { |
table.LC_data_table tr > td.LC_browser_file_published { |
Line 5477 table.LC_data_table tr > td.LC_roles_is
|
Line 5375 table.LC_data_table tr > td.LC_roles_is
|
} |
} |
|
|
table.LC_data_table tr > td.LC_roles_future { |
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 { |
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 { |
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 { |
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 { |
table.LC_data_table tr > td.LC_roles_selected { |
background: #11CC55; |
border-right: 8px solid #11CC55; |
} |
} |
|
|
span.LC_current_location { |
span.LC_current_location { |
Line 5688 table.LC_group_priv td {
|
Line 5586 table.LC_group_priv td {
|
padding: 0; |
padding: 0; |
} |
} |
|
|
table.LC_notify_front_page { |
|
background: white; |
|
border: 1px solid black; |
|
padding: 8px; |
|
} |
|
|
|
table.LC_notify_front_page td { |
|
padding: 8px; |
|
} |
|
|
|
.LC_navbuttons { |
.LC_navbuttons { |
margin: 2ex 0ex 2ex 0ex; |
margin: 2ex 0ex 2ex 0ex; |
} |
} |
Line 5717 table.LC_notify_front_page td {
|
Line 5605 table.LC_notify_front_page td {
|
font-size: 1.2em; |
font-size: 1.2em; |
} |
} |
|
|
.LC_topic_bar img { |
|
vertical-align: bottom; |
|
} |
|
|
|
table.LC_course_group_status { |
table.LC_course_group_status { |
margin: 20px; |
margin: 20px; |
} |
} |
Line 5959 div.LC_clear_float_footer {
|
Line 5843 div.LC_clear_float_footer {
|
} |
} |
|
|
div.LC_grade_show_user { |
div.LC_grade_show_user { |
margin-top: 20px; |
/* border-left: 5px solid $sidebg; */ |
border: 1px solid black; |
border-top: 5px solid #000000; |
|
margin: 50px 0 0 0; |
|
padding: 15px 0 5px 10px; |
} |
} |
|
|
div.LC_grade_user_name { |
div.LC_grade_show_user_odd_row { |
background: #DDDDEE; |
/* border-left: 5px solid #000000; */ |
border-bottom: 1px solid black; |
|
font-weight: bold; |
|
font-size: large; |
|
} |
} |
|
|
div.LC_grade_show_user_odd_row div.LC_grade_user_name { |
div.LC_grade_show_user div.LC_Box { |
background: #DDEEDD; |
margin-right: 50px; |
} |
} |
|
|
div.LC_grade_show_problem, |
|
div.LC_grade_submissions, |
div.LC_grade_submissions, |
div.LC_grade_message_center, |
div.LC_grade_message_center, |
div.LC_grade_info_links, |
div.LC_grade_info_links { |
div.LC_grade_assign { |
|
margin: 5px; |
margin: 5px; |
width: 99%; |
width: 99%; |
background: #FFFFFF; |
background: #FFFFFF; |
} |
} |
|
|
div.LC_grade_show_problem_header, |
|
div.LC_grade_submissions_header, |
div.LC_grade_submissions_header, |
div.LC_grade_message_center_header, |
div.LC_grade_message_center_header { |
div.LC_grade_assign_header { |
|
font-weight: bold; |
font-weight: bold; |
font-size: large; |
font-size: large; |
} |
} |
|
|
div.LC_grade_show_problem_problem, |
|
div.LC_grade_submissions_body, |
div.LC_grade_submissions_body, |
div.LC_grade_message_center_body, |
div.LC_grade_message_center_body { |
div.LC_grade_assign_body { |
|
border: 1px solid black; |
border: 1px solid black; |
width: 99%; |
width: 99%; |
background: #FFFFFF; |
background: #FFFFFF; |
} |
} |
|
|
span.LC_grade_check_note { |
|
font-weight: normal; |
|
font-size: medium; |
|
display: inline; |
|
position: absolute; |
|
right: 1em; |
|
} |
|
|
|
table.LC_scantron_action { |
table.LC_scantron_action { |
width: 100%; |
width: 100%; |
} |
} |
Line 6042 div.LC_edit_problem_header_title {
|
Line 5911 div.LC_edit_problem_header_title {
|
} |
} |
|
|
table.LC_edit_problem_header_title { |
table.LC_edit_problem_header_title { |
font-size: larger; |
|
font-weight: bold; |
|
width: 100%; |
width: 100%; |
border-color: $pgbg; |
|
border-style: solid; |
|
border-width: $border; |
|
background: $tabbg; |
background: $tabbg; |
border-collapse: collapse; |
|
padding: 0; |
|
} |
} |
|
|
div.LC_edit_problem_discards { |
div.LC_edit_problem_discards { |
Line 6083 div.LC_createcourse {
|
Line 5945 div.LC_createcourse {
|
display:none; |
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, |
a:hover, |
ol.LC_primary_menu a:hover, |
ol.LC_primary_menu a:hover, |
ol#LC_MenuBreadcrumbs a:hover, |
ol#LC_MenuBreadcrumbs a:hover, |
Line 6097 ol#LC_PathBreadcrumbs a:hover,
|
Line 5952 ol#LC_PathBreadcrumbs a:hover,
|
ul#LC_secondary_menu a:hover, |
ul#LC_secondary_menu a:hover, |
.LC_FormSectionClearButton input:hover |
.LC_FormSectionClearButton input:hover |
ul.LC_TabContent li:hover a { |
ul.LC_TabContent li:hover a { |
color:#BF2317; |
color:$button_hover; |
text-decoration:none; |
text-decoration:none; |
} |
} |
|
|
Line 6162 fieldset > legend {
|
Line 6017 fieldset > legend {
|
padding: 0 5px 0 5px; |
padding: 0 5px 0 5px; |
} |
} |
|
|
div.LC_page_header { |
|
background-color: $pgbg_or_bgcolor; |
|
margin: 0 0 1.0em 0; |
|
} |
|
|
|
#LC_nav_bar { |
#LC_nav_bar { |
float: left; |
float: left; |
margin: 0.2em 0 0 0; |
margin: 0 0 2px 0; |
} |
} |
|
|
#LC_realm { |
#LC_realm { |
Line 6184 div.LC_page_header {
|
Line 6034 div.LC_page_header {
|
font-style: normal; |
font-style: normal; |
} |
} |
|
|
|
/* Preliminary fix to hide nav_bar inside bookmarks window */ |
|
#LC_bookmarks #LC_nav_bar { |
|
display:none; |
|
} |
|
|
ol.LC_primary_menu { |
ol.LC_primary_menu { |
float: right; |
float: right; |
margin: 0.2em 0 0 0; |
margin: 0; |
} |
} |
|
|
ol#LC_PathBreadcrumbs { |
ol#LC_PathBreadcrumbs { |
Line 6201 ol.LC_primary_menu li {
|
Line 6056 ol.LC_primary_menu li {
|
|
|
ol.LC_primary_menu li img { |
ol.LC_primary_menu li img { |
vertical-align: bottom; |
vertical-align: bottom; |
|
height: 1.1em; |
} |
} |
|
|
ol.LC_primary_menu a { |
ol.LC_primary_menu a { |
font-size: 90%; |
|
color: RGB(80, 80, 80); |
color: RGB(80, 80, 80); |
text-decoration: none; |
text-decoration: none; |
} |
} |
Line 6253 ul#LC_secondary_menu li a {
|
Line 6108 ul#LC_secondary_menu li a {
|
} |
} |
|
|
ul.LC_TabContent { |
ul.LC_TabContent { |
min-height:1.5em; |
min-height:20px; |
} |
} |
|
|
ul.LC_TabContent li { |
ul.LC_TabContent li { |
vertical-align:middle; |
vertical-align:middle; |
padding: 0 10px 0 10px; |
padding: 0 16px 0 10px; |
background-color:$tabbg; |
background-color:$tabbg; |
border-bottom:solid 1px $lg_border_color; |
border-bottom:solid 1px $lg_border_color; |
|
border-right: solid 1px $font; |
} |
} |
|
|
ul.LC_TabContent .right { |
ul.LC_TabContent .right { |
Line 6273 ul.LC_TabContent li {
|
Line 6129 ul.LC_TabContent li {
|
text-decoration:none; |
text-decoration:none; |
font-size:95%; |
font-size:95%; |
font-weight:bold; |
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 { |
ul.LC_TabContent li.active { |
|
color: $font; |
background:#FFFFFF url(/adm/lonIcons/open.gif) no-repeat scroll right center; |
background:#FFFFFF url(/adm/lonIcons/open.gif) no-repeat scroll right center; |
border-bottom:solid 2px #FFFFFF; |
border-bottom:solid 1px #FFFFFF; |
padding-right: 16px; |
cursor: default; |
} |
} |
|
|
|
ul.LC_TabContent li.active a { |
|
color:$font; |
|
background:#FFFFFF; |
|
outline: none; |
|
} |
#maincoursedoc { |
#maincoursedoc { |
clear:both; |
clear:both; |
} |
} |
Line 6301 ul.LC_TabContentBigger li {
|
Line 6174 ul.LC_TabContentBigger li {
|
color: #737373; |
color: #737373; |
} |
} |
|
|
|
ul.LC_TabContentBigger li.active { |
|
position: relative; |
|
top: 1px; |
|
} |
|
|
ul.LC_TabContentBigger li a { |
ul.LC_TabContentBigger li a { |
background:url('/adm/lonIcons/tabbgleft.gif') left bottom no-repeat; |
background:url('/adm/lonIcons/tabbgleft.gif') left bottom no-repeat; |
Line 6309 ul.LC_TabContentBigger li a {
|
Line 6186 ul.LC_TabContentBigger li a {
|
text-align: center; |
text-align: center; |
display: block; |
display: block; |
text-decoration: none; |
text-decoration: none; |
|
outline: none; |
} |
} |
|
|
ul.LC_TabContentBigger li:hover a, |
|
ul.LC_TabContentBigger li.active a { |
ul.LC_TabContentBigger li.active a { |
background:url('/adm/lonIcons/tabbgleft.gif') left top no-repeat; |
background:url('/adm/lonIcons/tabbgleft.gif') left top no-repeat; |
color:$font; |
color:$font; |
text-decoration: underline; |
|
} |
} |
|
|
|
|
ul.LC_TabContentBigger li b { |
ul.LC_TabContentBigger li b { |
background: url('/adm/lonIcons/tabbgright.gif') no-repeat right bottom; |
background: url('/adm/lonIcons/tabbgright.gif') no-repeat right bottom; |
display: block; |
display: block; |
float: left; |
float: left; |
padding: 0 30px; |
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 { |
ul.LC_TabContentBigger li.active b { |
background:url('/adm/lonIcons/tabbgright.gif') right top no-repeat; |
background:url('/adm/lonIcons/tabbgright.gif') right top no-repeat; |
color:$font; |
color:$font; |
border-bottom: 1px solid #FFFFFF; |
border: 0; |
|
cursor:default; |
} |
} |
|
|
|
|
Line 6347 ol#LC_MenuBreadcrumbs,
|
Line 6227 ol#LC_MenuBreadcrumbs,
|
ol#LC_PathBreadcrumbs { |
ol#LC_PathBreadcrumbs { |
padding-left: 10px; |
padding-left: 10px; |
margin: 0; |
margin: 0; |
margin: 0; |
|
height: 2.5em; /* equal to #LC_breadcrumbs line-height */ |
height: 2.5em; /* equal to #LC_breadcrumbs line-height */ |
} |
} |
|
|
Line 6355 ol#LC_MenuBreadcrumbs li,
|
Line 6234 ol#LC_MenuBreadcrumbs li,
|
ol#LC_PathBreadcrumbs li, |
ol#LC_PathBreadcrumbs li, |
ul.LC_CourseBreadcrumbs li { |
ul.LC_CourseBreadcrumbs li { |
display: inline; |
display: inline; |
white-space: normal; |
white-space: normal; |
} |
} |
|
|
ol#LC_MenuBreadcrumbs li a, |
ol#LC_MenuBreadcrumbs li a, |
Line 6468 div.LC_columnSection>* {
|
Line 6347 div.LC_columnSection>* {
|
overflow:hidden; |
overflow:hidden; |
} |
} |
|
|
.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 { |
table em { |
font-weight: bold; |
font-weight: bold; |
font-style: normal; |
font-style: normal; |
Line 6549 a#LC_content_toolbar_firsthomework {
|
Line 6382 a#LC_content_toolbar_firsthomework {
|
background-image:url(/res/adm/pages/open-first-problem.gif); |
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 { |
a#LC_content_toolbar_everything { |
background-image:url(/res/adm/pages/show-all.gif); |
background-image:url(/res/adm/pages/show-all.gif); |
} |
} |
Line 6577 a#LC_content_toolbar_changefolder_toggle
|
Line 6402 a#LC_content_toolbar_changefolder_toggle
|
background-image:url(/res/adm/pages/open-all-folders.gif); |
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 { |
ul#LC_toolbar li a:hover { |
background-position: bottom center; |
background-position: bottom center; |
} |
} |
Line 6621 ul.LC_funclist {
|
Line 6442 ul.LC_funclist {
|
} |
} |
|
|
ul.LC_funclist > li:first-child { |
ul.LC_funclist > li:first-child { |
font-weight:bold; |
font-weight:bold; |
margin-left:0.8em; |
margin-left:0.8em; |
} |
} |
|
|
Line 6645 ul.LC_funclist li {
|
Line 6466 ul.LC_funclist li {
|
line-height: 150%; |
line-height: 150%; |
} |
} |
|
|
#gciheader { |
.ui-accordion .LC_advanced_toggle { |
float:left; |
float: right; |
width:100%; |
font-size: 90%; |
background:#DAE0D2 url("/gcimenu_bg.gif") repeat-x bottom; |
padding: 0px 4px |
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; |
|
} |
} |
|
|
END |
END |
Line 6728 sub headtag {
|
Line 6523 sub headtag {
|
if (!$args->{'frameset'}) { |
if (!$args->{'frameset'}) { |
$result .= &Apache::lonhtmlcommon::htmlareaheaders(); |
$result .= &Apache::lonhtmlcommon::htmlareaheaders(); |
} |
} |
if ($args->{'force_register'}) { |
if ($args->{'force_register'} && $env{'request.noversionuri'} !~ m{^/res/adm/pages/}) { |
$result .= &Apache::lonmenu::registerurl(1); |
$result .= Apache::lonxml::display_title(); |
} |
} |
if (!$args->{'no_nav_bar'} |
if (!$args->{'no_nav_bar'} |
&& !$args->{'only_body'} |
&& !$args->{'only_body'} |
Line 6755 ADDMETA
|
Line 6550 ADDMETA
|
$result .= '<title> LON-CAPA '.$title.'</title>' |
$result .= '<title> LON-CAPA '.$title.'</title>' |
.'<link rel="stylesheet" type="text/css" href="'.$url.'" />' |
.'<link rel="stylesheet" type="text/css" href="'.$url.'" />' |
.$head_extra; |
.$head_extra; |
return $result; |
return $result.'</head>'; |
} |
} |
|
|
=pod |
=pod |
Line 6790 Inputs: none
|
Line 6585 Inputs: none
|
sub xml_begin { |
sub xml_begin { |
my $output=''; |
my $output=''; |
|
|
if ($env{'internal.start_page'}==1) { |
|
&Apache::lonhtmlcommon::init_htmlareafields(); |
|
} |
|
|
|
if ($env{'browser.mathml'}) { |
if ($env{'browser.mathml'}) { |
$output='<?xml version="1.0"?>' |
$output='<?xml version="1.0"?>' |
#.'<?xml-stylesheet type="text/css" href="/adm/MathML/mathml.css"?>'."\n" |
#.'<?xml-stylesheet type="text/css" href="/adm/MathML/mathml.css"?>'."\n" |
Line 6812 sub xml_begin {
|
Line 6603 sub xml_begin {
|
|
|
=pod |
=pod |
|
|
=item * &endheadtag() |
|
|
|
Returns a uniform </head> for LON-CAPA web pages. |
|
|
|
Inputs: none |
|
|
|
=cut |
|
|
|
sub endheadtag { |
|
return '</head>'; |
|
} |
|
|
|
=pod |
|
|
|
=item * &head() |
|
|
|
Returns a uniform complete <head>..</head> section for LON-CAPA web pages. |
|
|
|
Inputs: |
|
|
|
=over 4 |
|
|
|
$title - optional title for the page |
|
|
|
$head_extra - optional extra HTML to put inside the <head> |
|
|
|
=back |
|
|
|
=cut |
|
|
|
sub head { |
|
my ($title,$head_extra,$args) = @_; |
|
return &headtag($title,$head_extra,$args).&endheadtag(); |
|
} |
|
|
|
=pod |
|
|
|
=item * &start_page() |
=item * &start_page() |
|
|
Returns a complete <html> .. <body> section for LON-CAPA web pages. |
Returns a complete <html> .. <body> section for LON-CAPA web pages. |
Line 6886 $args - additional optional args support
|
Line 6640 $args - additional optional args support
|
skip_phases -> hash ref of |
skip_phases -> hash ref of |
head -> skip the <html><head> generation |
head -> skip the <html><head> generation |
body -> skip all <body> generation |
body -> skip all <body> 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 |
no_auto_mt_title -> prevent &mt()ing the title arg |
inherit_jsmath -> when creating popup window in a page, |
inherit_jsmath -> when creating popup window in a page, |
should it have jsmath forced on by the |
should it have jsmath forced on by the |
Line 6904 $args - additional optional args support
|
Line 6656 $args - additional optional args support
|
sub start_page { |
sub start_page { |
my ($title,$head_extra,$args) = @_; |
my ($title,$head_extra,$args) = @_; |
#&Apache::lonnet::logthis("start_page ".join(':',caller(0))); |
#&Apache::lonnet::logthis("start_page ".join(':',caller(0))); |
|
#SD |
|
#I don't see why we copy certain elements of %$args to %head_args |
|
#head args is passed to headtag() and this routine only reads those |
|
#keys that are needed. There doesn't happen any writes or any processing |
|
#of other keys. |
|
#proposal: just pass $args to headtag instead of \%head_args and delete |
|
#marked lines |
|
#<- MARK |
my %head_args; |
my %head_args; |
foreach my $arg ('redirect','force_register','domain','function', |
foreach my $arg ('redirect','force_register','domain','function', |
'bgcolor','frameset','no_nav_bar','only_body', |
'bgcolor','frameset','no_nav_bar','only_body', |
Line 6912 sub start_page {
|
Line 6672 sub start_page {
|
$head_args{$arg} = $args->{$arg}; |
$head_args{$arg} = $args->{$arg}; |
} |
} |
} |
} |
|
#MARK -> |
|
|
$env{'internal.start_page'}++; |
$env{'internal.start_page'}++; |
my $result; |
my $result; |
|
|
if (! exists($args->{'skip_phases'}{'head'}) ) { |
if (! exists($args->{'skip_phases'}{'head'}) ) { |
$result.= |
$result .= |
&xml_begin(). |
&xml_begin() . &headtag($title,$head_extra,\%head_args); |
&headtag($title,$head_extra,\%head_args).&endheadtag(); |
#replace prev line by |
|
# &xml_begin() . &headtag($title, $head_extra, $args); |
} |
} |
|
|
if (! exists($args->{'skip_phases'}{'body'}) ) { |
if (! exists($args->{'skip_phases'}{'body'}) ) { |
Line 6932 sub start_page {
|
Line 6695 sub start_page {
|
$args->{'function'}, $args->{'add_entries'}, |
$args->{'function'}, $args->{'add_entries'}, |
$args->{'only_body'}, $args->{'domain'}, |
$args->{'only_body'}, $args->{'domain'}, |
$args->{'force_register'}, $args->{'no_nav_bar'}, |
$args->{'force_register'}, $args->{'no_nav_bar'}, |
$args->{'bgcolor'}, $args->{'no_inline_link'}, |
$args->{'bgcolor'}, $args); |
$args); |
|
} |
} |
} |
} |
|
|
Line 6949 sub start_page {
|
Line 6711 sub start_page {
|
# $result .= &build_functionlist(); |
# $result .= &build_functionlist(); |
#} |
#} |
|
|
# Don't add anything more if only_body wanted |
# Don't add anything more if only_body wanted or in const space |
return $result if $args->{'only_body'}; |
return $result if $args->{'only_body'} |
|
|| $env{'request.state'} eq 'construct'; |
|
|
#Breadcrumbs for Construction Space provided by &bodytag. |
|
if (($env{'environment.remote'} eq 'off') && ($env{'request.state'} eq 'construct')) { |
|
return $result; |
|
} |
|
|
|
#Breadcrumbs |
#Breadcrumbs |
if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) { |
if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) { |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
Line 6970 sub start_page {
|
Line 6728 sub start_page {
|
#if bread_crumbs_component exists show it as headline else show only the breadcrumbs |
#if bread_crumbs_component exists show it as headline else show only the breadcrumbs |
if(exists($args->{'bread_crumbs_component'})){ |
if(exists($args->{'bread_crumbs_component'})){ |
$result .= &Apache::lonhtmlcommon::breadcrumbs($args->{'bread_crumbs_component'}); |
$result .= &Apache::lonhtmlcommon::breadcrumbs($args->{'bread_crumbs_component'}); |
} elsif (exists($args->{'bread_crumbs_menulink'})) { |
}else{ |
$result .= &Apache::lonhtmlcommon::breadcrumbs('','',$args->{'bread_crumbs_menulink'}); |
$result .= &Apache::lonhtmlcommon::breadcrumbs(); |
} else { |
|
$result .= &Apache::lonhtmlcommon::breadcrumbs(); |
|
} |
} |
} |
} |
return $result; |
return $result; |
} |
} |
|
|
|
|
=pod |
|
|
|
=item * &head() |
|
|
|
Returns a complete </body></html> 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 <frameset> |
|
rather than <body> |
|
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 { |
sub end_page { |
my ($args) = @_; |
my ($args) = @_; |
$env{'internal.end_page'}++; |
$env{'internal.end_page'}++; |
Line 7090 sub simple_error_page {
|
Line 6824 sub simple_error_page {
|
|
|
{ |
{ |
my @row_count; |
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 { |
sub start_data_table { |
my ($add_class) = @_; |
my ($add_class) = @_; |
my $css_class = (join(' ','LC_data_table',$add_class)); |
my $css_class = (join(' ','LC_data_table',$add_class)); |
unshift(@row_count,0); |
&start_data_table_count(); |
return '<table class="'.$css_class.'">'."\n"; |
return '<table class="'.$css_class.'">'."\n"; |
} |
} |
|
|
sub end_data_table { |
sub end_data_table { |
shift(@row_count); |
&end_data_table_count(); |
return '</table>'."\n";; |
return '</table>'."\n";; |
} |
} |
|
|
Line 7904 sub user_picker {
|
Line 7649 sub user_picker {
|
'whse' => "When searching by last,first you must include at least one character in the first name.", |
'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:", |
'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 = ' <select name="srchin">'; |
my $srchinsel = ' <select name="srchin">'; |
|
|
my @srchins = ('crs','dom','alc','instd'); |
my @srchins = ('crs','dom','alc','instd'); |
|
|
foreach my $option (@srchins) { |
foreach my $option (@srchins) { |
Line 7916 sub user_picker {
|
Line 7661 sub user_picker {
|
next if ($option eq 'alc'); |
next if ($option eq 'alc'); |
next if (($option eq 'crs') && ($env{'form.form'} eq 'requestcrs')); |
next if (($option eq 'crs') && ($env{'form.form'} eq 'requestcrs')); |
next if ($option eq 'crs' && !$env{'request.course.id'}); |
next if ($option eq 'crs' && !$env{'request.course.id'}); |
next if ($option eq 'instd'); |
|
if ($curr_selected{'srchin'} eq $option) { |
if ($curr_selected{'srchin'} eq $option) { |
$srchinsel .= ' |
$srchinsel .= ' |
<option value="'.$option.'" selected="selected">'.$lt{$option}.'</option>'; |
<option value="'.$option.'" selected="selected">'.$lt{$option}.'</option>'; |
} else { |
} else { |
$srchinsel .= ' |
$srchinsel .= ' |
<option value="'.$option.'">'.$lt{$option}.'</option>'; |
<option value="'.$option.'">'.$lt{$option}.'</option>'; |
} |
} |
} |
} |
$srchinsel .= "\n </select>\n"; |
$srchinsel .= "\n </select>\n"; |
Line 7966 sub user_picker {
|
Line 7710 sub user_picker {
|
); |
); |
$new_user_create = '<p class="LC_warning">' |
$new_user_create = '<p class="LC_warning">' |
.&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.") |
.&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.") |
.'<br />' |
.' ' |
.&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.' |
,'<a href="'.$helplink.'">','</a>') |
,'<a href="'.$helplink.'">','</a>') |
.'</p><br />'; |
.'</p><br />'; |
} |
} |
} |
} |
Line 8317 sub get_institutional_codes {
|
Line 8061 sub get_institutional_codes {
|
return; |
return; |
} |
} |
|
|
|
sub get_standard_codeitems { |
|
return ('Year','Semester','Department','Number','Section'); |
|
} |
|
|
=pod |
=pod |
|
|
=head1 Slot Helpers |
=head1 Slot Helpers |
Line 10293 sub check_clone {
|
Line 10041 sub check_clone {
|
'userroles',['active'],[$ccrole], |
'userroles',['active'],[$ccrole], |
[$args->{'clonedomain'}]); |
[$args->{'clonedomain'}]); |
if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':'.$ccrole}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) { |
if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':'.$ccrole}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) { |
$can_clone = 1; |
$can_clone = 1; |
} else { |
} elsif (&Apache::lonnet::is_course_owner($args->{'clonedomain'},$args->{'clonecourse'},$args->{'ccuname'},$args->{'ccdomain'})) { |
|
$can_clone = 1; |
|
} else { |
if ($args->{'crstype'} eq 'Community') { |
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'}); |
$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 { |
} else { |
Line 10354 sub construct_course {
|
Line 10104 sub construct_course {
|
# if anyone ever decides to not show this, and Utils::Course::new |
# if anyone ever decides to not show this, and Utils::Course::new |
# will need to be suitably modified. |
# will need to be suitably modified. |
$outcome .= &mt('New LON-CAPA [_1] ID: [_2]',$crstype,$$courseid).$linefeed; |
$outcome .= &mt('New LON-CAPA [_1] ID: [_2]',$crstype,$$courseid).$linefeed; |
|
if ($$courseid =~ /^error:/) { |
|
return (0,$outcome); |
|
} |
|
|
# |
# |
# Check if created correctly |
# Check if created correctly |
# |
# |
($$crsudom,$$crsunum)= &LONCAPA::split_courseid($$courseid); |
($$crsudom,$$crsunum)= &LONCAPA::split_courseid($$courseid); |
my $crsuhome=&Apache::lonnet::homeserver($$crsunum,$$crsudom); |
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; |
$outcome .= &mt('Created on').': '.$crsuhome.$linefeed; |
|
|
# |
# |
Line 10377 sub construct_course {
|
Line 10135 sub construct_course {
|
$cenv{'url'}=$oldcenv{'url'}; |
$cenv{'url'}=$oldcenv{'url'}; |
# Restore title |
# Restore title |
$cenv{'description'}=$oldcenv{'description'}; |
$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 |
# Mark as cloned |
$cenv{'clonedfrom'}=$cloneid; |
$cenv{'clonedfrom'}=$cloneid; |
# Need to clone grading mode |
# Need to clone grading mode |
Line 10623 sub construct_course {
|
Line 10385 sub construct_course {
|
$title=&mt('Syllabus'); |
$title=&mt('Syllabus'); |
$url='/public/'.$$crsudom.'/'.$$crsunum.'/syllabus'; |
$url='/public/'.$$crsudom.'/'.$$crsunum.'/syllabus'; |
} else { |
} else { |
$title=&mt('Navigate Contents'); |
$title=&mt('Table of Contents'); |
$url='/adm/navmaps'; |
$url='/adm/navmaps'; |
} |
} |
|
|
Line 10634 sub construct_course {
|
Line 10396 sub construct_course {
|
$outcome .= ($fatal?$errtext:'write ok').$linefeed; |
$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); |
return (1,$outcome); |
} |
} |
|
|
############################################################ |
############################################################ |
############################################################ |
############################################################ |
|
|
|
#SD |
|
# only Community and Course, or anything else? |
sub course_type { |
sub course_type { |
my ($cid) = @_; |
my ($cid) = @_; |
if (!defined($cid)) { |
if (!defined($cid)) { |
Line 10820 sub init_user_environment {
|
Line 10569 sub init_user_environment {
|
my %userenv = &Apache::lonnet::dump('environment',$domain,$username); |
my %userenv = &Apache::lonnet::dump('environment',$domain,$username); |
my ($tmp) = keys(%userenv); |
my ($tmp) = keys(%userenv); |
if ($tmp !~ /^(con_lost|error|no_such_host)/i) { |
if ($tmp !~ /^(con_lost|error|no_such_host)/i) { |
# default remote control to off |
|
if ($userenv{'remote'} ne 'on') { $userenv{'remote'} = 'off'; } |
|
} else { |
} else { |
undef(%userenv); |
undef(%userenv); |
} |
} |
if (($userenv{'interface'}) && (!$form->{'interface'})) { |
if (($userenv{'interface'}) && (!$form->{'interface'})) { |
$form->{'interface'}=$userenv{'interface'}; |
$form->{'interface'}=$userenv{'interface'}; |
} |
} |
$env{'environment.remote'}=$userenv{'remote'}; |
|
if ($userenv{'texengine'} eq 'ttm') { $clientmathml=1; } |
if ($userenv{'texengine'} eq 'ttm') { $clientmathml=1; } |
|
|
# --------------- Do not trust query string to be put directly into environment |
# --------------- Do not trust query string to be put directly into environment |
Line 10860 sub init_user_environment {
|
Line 10606 sub init_user_environment {
|
$initial_env{"browser.localres"} = $form->{'localres'}; |
$initial_env{"browser.localres"} = $form->{'localres'}; |
} |
} |
|
|
if ($public) { |
|
$initial_env{"environment.remote"} = "off"; |
|
} |
|
if ($form->{'interface'}) { |
if ($form->{'interface'}) { |
$form->{'interface'}=~s/\W//gs; |
$form->{'interface'}=~s/\W//gs; |
$initial_env{"browser.interface"} = $form->{'interface'}; |
$initial_env{"browser.interface"} = $form->{'interface'}; |
Line 10915 sub _add_to_env {
|
Line 10658 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 |
# --- Get the symbolic name of a problem and the url |
sub get_symb { |
sub get_symb { |
my ($request,$silent) = @_; |
my ($request,$silent) = @_; |
Line 11010 sub clean_symb {
|
Line 10699 sub clean_symb {
|
return ($symb,$enc); |
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 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 => '', |
|
submit => '', |
|
tutorial' => '', |
|
} |
|
); |
|
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 = '<form name="'.$formname.'" action="/adm/roles" method="post">'. |
|
'<select name="newrole" onchange="javascript:courseswitcher();">'. |
|
'<option value="" selected="selected">'.$default.'</option>'; |
|
foreach my $item (@sorted_courses) { |
|
foreach my $course (@{$Sortby{$item}}) { |
|
my ($cdom,$cnum) = split('_',$course); |
|
$output .= '<option value="'.$role.'./'.$cdom.'/'.$cnum.'">'.$courses{$course}{'description'}.'</option>'; |
|
} |
|
} |
|
$output .= '</select><input type="hidden" name="selectrole" value="" /></form>'; |
|
} |
|
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 |
=pod |
|
|
=back |
=back |