version 1.357, 2006/05/01 19:07:16
|
version 1.367, 2006/05/09 20:25:05
|
Line 2773 Inputs:
|
Line 2773 Inputs:
|
|
|
=item * $notitle, if true keep the nav controls, but remove the title bar |
=item * $notitle, if true keep the nav controls, but remove the title bar |
|
|
|
=item * $no_inline_link, if true and in remote mode, don't show the |
|
'Switch To Inline Menu' link |
|
|
|
|
=back |
=back |
|
|
Line 2785 other decorations will be returned.
|
Line 2788 other decorations will be returned.
|
|
|
sub bodytag { |
sub bodytag { |
my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,$customtitle, |
my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,$customtitle, |
$notopbar,$bgcolor,$notitle)=@_; |
$notopbar,$bgcolor,$notitle,$no_inline_link)=@_; |
|
|
$title=&mt($title); |
$title=&mt($title); |
|
|
$function = &get_users_function() if (!$function); |
$function = &get_users_function() if (!$function); |
my $img = &designparm($function.'.img',$domain); |
my $img = &designparm($function.'.img',$domain); |
my $tabbg = &designparm($function.'.tabbg',$domain); |
|
my $font = &designparm($function.'.font',$domain); |
my $font = &designparm($function.'.font',$domain); |
my $sidebg = &designparm($function.'.sidebg',$domain); |
|
my $pgbg = $bgcolor || &designparm($function.'.pgbg',$domain); |
my $pgbg = $bgcolor || &designparm($function.'.pgbg',$domain); |
|
|
my %design = ( 'style' => 'margin-top: 0px', |
my %design = ( 'style' => 'margin-top: 0px', |
Line 2805 sub bodytag {
|
Line 2806 sub bodytag {
|
@$addentries{keys(%design)} = @design{keys(%design)}; |
@$addentries{keys(%design)} = @design{keys(%design)}; |
|
|
# role and realm |
# role and realm |
my ($role,$realm) |
my ($role,$realm) = |
=&Apache::lonnet::plaintext((split(/\./,$env{'request.role'}))[0]); |
&Apache::lonnet::plaintext((split(/\./,$env{'request.role'}))[0]); |
# realm |
# realm |
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
$realm= |
$realm = $env{'course.'.$env{'request.course.id'}.'.description'}; |
$env{'course.'.$env{'request.course.id'}.'.description'}; |
|
} |
} |
unless ($realm) { $realm=' '; } |
if (!$realm) { $realm=' '; } |
# Set messages |
# Set messages |
my $messages=&domainlogo($domain); |
my $messages=&domainlogo($domain); |
# Port for miniserver |
# Port for miniserver |
Line 2822 sub bodytag {
|
Line 2822 sub bodytag {
|
my $extra_body_attr = &make_attr_string($forcereg,$addentries); |
my $extra_body_attr = &make_attr_string($forcereg,$addentries); |
|
|
# construct main body tag |
# construct main body tag |
my $bodytag = <<END; |
my $bodytag = "<body $extra_body_attr>". |
<body $extra_body_attr> |
&Apache::lontexconvert::init_math_support(); |
END |
|
|
|
$bodytag .= &Apache::lontexconvert::init_math_support(); |
|
|
|
my $upperleft='<img src="http://'.$ENV{'HTTP_HOST'}.':'. |
|
$lonhttpdPort.$img.'" alt="'.$function.'" />'; |
|
if ($bodyonly |
if ($bodyonly |
|| ($env{'request.state'} eq 'construct' |
|| ($env{'request.state'} eq 'construct' |
&& $env{'environment.remote'} ne 'off' )) { |
&& $env{'environment.remote'} ne 'off' )) { |
Line 2842 END
|
Line 2837 END
|
$bodytag.='<h1>LON-CAPA: '.$title.'</h1>'; |
$bodytag.='<h1>LON-CAPA: '.$title.'</h1>'; |
} |
} |
return $bodytag; |
return $bodytag; |
} elsif ($env{'environment.remote'} eq 'off') { |
} |
# No Remote |
|
my $roleinfo=(<<ENDROLE); |
|
<td bgcolor="$tabbg" align="right"> |
|
<font size="2" face="Arial, Helvetica, sans-serif"> |
my $roleinfo=(<<ENDROLE); |
|
<td class="LC_title_bar_who"> |
|
<div class="LC_title_bar_name"> |
$env{'environment.firstname'} |
$env{'environment.firstname'} |
$env{'environment.middlename'} |
$env{'environment.middlename'} |
$env{'environment.lastname'} |
$env{'environment.lastname'} |
$env{'environment.generation'} |
$env{'environment.generation'} |
</font> |
|
<br /> |
</div> |
<font size="2" face="Arial, Helvetica, sans-serif">$role</font> |
<div class="LC_title_bar_role"> |
<br /> |
$role |
<font size="2" face="Arial, Helvetica, sans-serif">$realm</font> |
</div> |
|
<div class="LC_title_bar_realm"> |
|
$realm |
|
</div> |
</td> |
</td> |
ENDROLE |
ENDROLE |
my $titleinfo = '<font face="Arial, Helvetica, sans-serif" size="+3" color="'. |
|
$font.'"><b>'.$title.'</b></font>'; |
|
if ($customtitle) { |
|
$titleinfo = $customtitle; |
|
} |
|
|
|
|
my $titleinfo = '<span class="LC_title_bar_title">'.$title.'</span>'; |
|
if ($customtitle) { |
|
$titleinfo = $customtitle; |
|
} |
|
# |
|
# Extra info if you are the DC |
|
my $dc_info = ''; |
|
if ($env{'user.adv'} && exists($env{'user.role.dc./'. |
|
$env{'course.'.$env{'request.course.id'}. |
|
'.domain'}.'/'})) { |
|
my $cid = $env{'request.course.id'}; |
|
$dc_info.= $cid.' '.$env{'course.'.$cid.'.internal.coursecode'}; |
|
$dc_info = '('.$dc_info.')'; |
|
} |
|
|
|
if ($env{'environment.remote'} eq 'off') { |
|
# No Remote |
if ($env{'request.state'} eq 'construct') { |
if ($env{'request.state'} eq 'construct') { |
|
$forcereg=1; |
|
} |
|
|
|
if (!$customtitle && $env{'request.state'} eq 'construct') { |
|
# this is for resources; directories have customtitle, and crumbs |
|
# and select recent are created in lonpubdir.pm |
my ($uname,$thisdisfn)= |
my ($uname,$thisdisfn)= |
($env{'request.filename'} =~ m|^/home/([^/]+)/public_html/(.*)|); |
($env{'request.filename'} =~ m|^/home/([^/]+)/public_html/(.*)|); |
my $formaction='/priv/'.$uname.'/'.$thisdisfn; |
my $formaction='/priv/'.$uname.'/'.$thisdisfn; |
$formaction=~s/\/+/\//g; |
$formaction=~s/\/+/\//g; |
unless ($customtitle) { #this is for resources; directories have customtitle, and crumbs and select recent are created in lonpubdir.pm |
|
my $parentpath = ''; |
|
my $lastitem = ''; |
|
if ($thisdisfn =~ m-(.+/)([^/]*)$-) { |
|
$parentpath = $1; |
|
$lastitem = $2; |
|
} else { |
|
$lastitem = $thisdisfn; |
|
} |
|
$titleinfo = &Apache::loncommon::help_open_menu('','','','',3,'Authoring'). |
|
'<font face="Arial, Helvetica, sans-serif"><b>Construction Space</b>:</font> '. |
|
'<form name="dirs" method="post" action="'.$formaction |
|
.'" target="_top"><tt><b>' |
|
.&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv','','+1',1)."<font size=\"+1\">$lastitem</font></b></tt><br />" |
|
.&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()') |
|
.'</form>' |
|
.&Apache::lonmenu::constspaceform(); |
|
|
|
} |
my $parentpath = ''; |
$forcereg=1; |
my $lastitem = ''; |
|
if ($thisdisfn =~ m-(.+/)([^/]*)$-) { |
|
$parentpath = $1; |
|
$lastitem = $2; |
|
} else { |
|
$lastitem = $thisdisfn; |
|
} |
|
$titleinfo = |
|
&Apache::loncommon::help_open_menu('','','','',3,'Authoring'). |
|
'<b>Construction Space</b>: '. |
|
'<form name="dirs" method="post" action="'.$formaction |
|
.'" target="_top"><tt><b>' |
|
.&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv','','+1',1)."<font size=\"+1\">$lastitem</font></b></tt><br />" |
|
.&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()') |
|
.'</form>' |
|
.&Apache::lonmenu::constspaceform(); |
} |
} |
|
|
my $titletable; |
my $titletable; |
if (!$notitle) { |
if (!$notitle) { |
$titletable = |
$titletable = |
'<table bgcolor="'.$pgbg.'" width="100%" border="0" '. |
'<table id="LC_title_bar">'. |
'cellspacing="3" cellpadding="3">'. |
"<tr><td> $titleinfo $dc_info</td>".$roleinfo. |
'<tr><td bgcolor="'.$tabbg.'">'. |
'</tr></table>'; |
$titleinfo.'</td>'.$roleinfo.'</tr></table>'; |
|
} |
} |
if ($env{'request.state'} eq 'construct') { |
if ($notopbar) { |
if ($notopbar) { |
$bodytag .= $titletable; |
$bodytag .= $titletable; |
} else { |
} else { |
if ($env{'request.state'} eq 'construct') { |
$bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg, |
$bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg, |
$titletable); |
$titletable); |
} |
|
} else { |
|
if ($notopbar) { |
|
$bodytag .= $titletable; |
|
} else { |
} else { |
$bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg). |
$bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg). |
$titletable; |
$titletable; |
} |
} |
} |
} |
return $bodytag; |
return $bodytag; |
Line 2919 ENDROLE
|
Line 2931 ENDROLE
|
# |
# |
# Top frame rendering, Remote is up |
# Top frame rendering, Remote is up |
# |
# |
my $titleinfo = ' <font size="5" face="Arial, Helvetica, sans-serif"><b>'.$title.'</b></font>'; |
|
if ($customtitle) { |
my $upperleft='<img src="http://'.$ENV{'HTTP_HOST'}.':'. |
$titleinfo = $customtitle; |
$lonhttpdPort.$img.'" alt="'.$function.'" />'; |
} |
|
# |
|
# Extra info if you are the DC |
|
my $dc_info = ''; |
|
if ($env{'user.adv'} && exists($env{'user.role.dc./'. |
|
$env{'course.'.$env{'request.course.id'}. |
|
'.domain'}.'/'})) { |
|
my $cid = $env{'request.course.id'}; |
|
$dc_info.= $cid.' '.$env{'course.'.$cid.'.internal.coursecode'}; |
|
$dc_info = '('.$dc_info.')'; |
|
} |
|
# Explicit link to get inline menu |
# Explicit link to get inline menu |
my $menu='<br /><font size="2" face="Arial, Helvetica, sans-serif"> <a href="/adm/remote?action=collapse">'.&mt('Switch to Inline Menu Mode').'</a></font>'; |
my $menu= ($no_inline_link?'' |
|
:'<br /><a href="/adm/remote?action=collapse">'.&mt('Switch to Inline Menu Mode').'</a>'); |
# |
# |
if ($notitle) { |
if ($notitle) { |
return $bodytag; |
return $bodytag; |
} |
} |
return(<<ENDBODY); |
return(<<ENDBODY); |
$bodytag |
$bodytag |
<table width="100%" cellspacing="0" border="0" cellpadding="0"> |
<table id="LC_title_bar" class="LC_with_remote"> |
<tr><td bgcolor="$sidebg"> |
<tr><td>$upperleft</td> |
$upperleft</td> |
<td class="LC_title_bar_domain_logo">$messages </td> |
<td bgcolor="$sidebg" align="right">$messages </td> |
|
</tr> |
|
<tr> |
|
<td rowspan="3" bgcolor="$tabbg"> |
|
$titleinfo $dc_info $menu |
|
</td><td bgcolor="$tabbg" align="right"> |
|
<font size="2" face="Arial, Helvetica, sans-serif"> |
|
$env{'environment.firstname'} |
|
$env{'environment.middlename'} |
|
$env{'environment.lastname'} |
|
$env{'environment.generation'} |
|
</font> |
|
</td> |
|
</tr> |
</tr> |
<tr><td bgcolor="$tabbg" align="right"> |
<tr><td>$titleinfo $dc_info $menu</td> |
<font size="2" face="Arial, Helvetica, sans-serif">$role</font> |
$roleinfo |
</td></tr> |
|
<tr> |
|
<td bgcolor="$tabbg" align="right"><font size="2" face="Arial, Helvetica, sans-serif">$realm</font> </td></tr> |
|
</table> |
</table> |
ENDBODY |
ENDBODY |
} |
} |
Line 3102 sub standard_css {
|
Line 3089 sub standard_css {
|
my $mail_other_hover = '#669999'; |
my $mail_other_hover = '#669999'; |
|
|
return <<END; |
return <<END; |
<style type="text/css"> |
|
h1, h2, h3, th { font-family: $sans } |
h1, h2, h3, th { font-family: $sans } |
a:focus { color: red; background: yellow } |
a:focus { color: red; background: yellow } |
table.thinborder { border-collapse: collapse; } |
table.thinborder { border-collapse: collapse; } |
Line 3122 table#LC_top_nav, table#LC_menubuttons,
|
Line 3108 table#LC_top_nav, table#LC_menubuttons,
|
width: 100%; |
width: 100%; |
background: $pgbg; |
background: $pgbg; |
border: 0px; |
border: 0px; |
border-spacing: 1px; |
border-spacing: 2px 1px; |
padding: 0px; |
padding: 0px; |
margin: 0px; |
margin: 0px; |
border-collapse: separate; |
border-collapse: separate; |
} |
} |
|
table#LC_title_bar { |
|
width: 100%; |
|
border: 0; |
|
border-spacing: 0px 1px; |
|
background: $pgbg; |
|
font-family: $sans; |
|
border-collapse: collapse; |
|
} |
|
table#LC_title_bar.LC_with_remote { |
|
width: 100%; |
|
border: 0; |
|
border-spacing: 0; |
|
background: $pgbg; |
|
font-family: $sans; |
|
border-collapse: collapse; |
|
} |
|
table#LC_title_bar td { |
|
padding: 3px; |
|
background: $tabbg; |
|
} |
|
table#LC_title_bar td.LC_title_bar_who { |
|
background: $tabbg; |
|
color: $font; |
|
font: medium $sans; |
|
text-align: right; |
|
} |
|
span.LC_title_bar_title { |
|
font: bold xx-large $sans; |
|
} |
|
table#LC_title_bar td.LC_title_bar_domain_logo { |
|
background: $sidebg; |
|
text-align: right; |
|
} |
|
|
table#LC_menubuttons_mainmenu { |
table#LC_menubuttons_mainmenu { |
background: $pgbg; |
background: $pgbg; |
border: 0px; |
border: 0px; |
Line 3145 table#LC_top_nav td a, div#LC_top_nav a
|
Line 3165 table#LC_top_nav td a, div#LC_top_nav a
|
color: $font; |
color: $font; |
font-family: $sans; |
font-family: $sans; |
} |
} |
|
table#LC_top_nav td.LC_top_nav_logo { |
|
background: $tabbg; |
|
text-align: right; |
|
} |
table#LC_breadcrumbs td { |
table#LC_breadcrumbs td { |
background: $tabbg; |
background: $tabbg; |
color: $font; |
color: $font; |
font-family: $sans; |
font-family: $sans; |
font-size: smallest; |
font-size: smaller; |
} |
} |
table#LC_breadcrumbs td.LC_breadcrumb_component { |
table#LC_breadcrumbs td.LC_breadcrumb_component { |
background: $tabbg; |
background: $tabbg; |
Line 3240 table.LC_mail_list tr.LC_mail_other {
|
Line 3264 table.LC_mail_list tr.LC_mail_other {
|
table.LC_mail_list tr.LC_mail_other:hover { |
table.LC_mail_list tr.LC_mail_other:hover { |
background-color: $mail_other_hover; |
background-color: $mail_other_hover; |
} |
} |
</style> |
|
END |
END |
} |
} |
|
|
Line 3274 Inputs: $title - optional title for the
|
Line 3297 Inputs: $title - optional title for the
|
sub headtag { |
sub headtag { |
my ($title,$head_extra,$args) = @_; |
my ($title,$head_extra,$args) = @_; |
|
|
|
my $function = $args->{'function'} || &get_users_function(); |
|
my $domain = $args->{'domain'} || &determinedomain(); |
|
my $bgcolor = $args->{'bgcolor'} || &designparm($function.'.pgbg',$domain); |
|
my $url = join(':',$env{'user.name'},$env{'user.domain'}, |
|
$env{'environment.color.timestamp'}, |
|
$function,$domain,$bgcolor); |
|
|
|
$url = '/adm/css/'.&Apache::lonnet::escape($url).'.css'; |
|
|
my $result = |
my $result = |
'<head>'. |
'<head>'. |
&standard_css($args->{'function'},$args->{'domain'}, |
'<link rel="stylesheet" type="text/css" href="'.$url.'" />'. |
$args->{'bgcolor'}). |
|
&font_settings(). |
&font_settings(). |
&Apache::lonhtmlcommon::htmlareaheaders(); |
&Apache::lonhtmlcommon::htmlareaheaders(); |
|
|
Line 3436 Inputs: $title - optional title for the
|
Line 3467 Inputs: $title - optional title for the
|
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 |
|
|
=back |
=back |
|
|
=cut |
=cut |
Line 3471 sub start_page {
|
Line 3505 sub start_page {
|
$args->{'only_body'}, $args->{'domain'}, |
$args->{'only_body'}, $args->{'domain'}, |
$args->{'force_register'}, $args->{'body_title'}, |
$args->{'force_register'}, $args->{'body_title'}, |
$args->{'no_nav_bar'}, $args->{'bgcolor'}, |
$args->{'no_nav_bar'}, $args->{'bgcolor'}, |
$args->{'no_title'}); |
$args->{'no_title'}, $args->{'no_inline_link'}); |
} |
} |
} |
} |
|
|
Line 3612 sub simple_error_page {
|
Line 3646 sub simple_error_page {
|
sub end_data_table_row { |
sub end_data_table_row { |
return '</tr>'; |
return '</tr>'; |
} |
} |
|
|
|
sub start_data_table_header_row { |
|
return '<tr class="LC_header_row">'; |
|
} |
|
|
|
sub end_data_table_header_row { |
|
return '</tr>'; |
|
} |
} |
} |
|
|
############################################### |
############################################### |
Line 3717 Returns number of sections.
|
Line 3759 Returns number of sections.
|
|
|
############################################### |
############################################### |
sub get_sections { |
sub get_sections { |
my ($cdom,$cnum,$sectioncount,$possible_roles) = @_; |
my ($cdom,$cnum,$possible_roles) = @_; |
if (!($cdom && $cnum)) { return 0; } |
if (!defined($cdom) || !defined($cnum)) { |
my $numsections = 0; |
my $cid = $env{'request.course.id'}; |
|
|
|
return if (!defined($cid)); |
|
|
if (!defined($possible_roles) || (grep/^st$/,@$possible_roles)) { |
$cdom = $env{'course.'.$cid.'.domain'}; |
|
$cnum = $env{'course.'.$cid.'.num'}; |
|
} |
|
|
|
my %sectioncount; |
|
|
|
if (!defined($possible_roles) || (grep(/^st$/,@$possible_roles))) { |
my ($classlist) = &Apache::loncoursedata::get_classlist($cdom,$cnum); |
my ($classlist) = &Apache::loncoursedata::get_classlist($cdom,$cnum); |
my $sec_index = &Apache::loncoursedata::CL_SECTION(); |
my $sec_index = &Apache::loncoursedata::CL_SECTION(); |
my $status_index = &Apache::loncoursedata::CL_STATUS(); |
my $status_index = &Apache::loncoursedata::CL_STATUS(); |
while (my ($student,$data) = each %$classlist) { |
while (my ($student,$data) = each(%$classlist)) { |
my ($section,$status) = ($data->[$sec_index], |
my ($section,$status) = ($data->[$sec_index], |
$data->[$status_index]); |
$data->[$status_index]); |
unless ($section eq '-1' || $section =~ /^\s*$/) { |
unless ($section eq '-1' || $section =~ /^\s*$/) { |
if (!defined($$sectioncount{$section})) { $numsections++; } |
$sectioncount{$section}++; |
$$sectioncount{$section}++; |
|
} |
} |
} |
} |
} |
} |
Line 3746 sub get_sections {
|
Line 3795 sub get_sections {
|
} |
} |
if ($user =~ /^$role:[^:]*:[^:]*:(\w+)/) { $section=$1; } |
if ($user =~ /^$role:[^:]*:[^:]*:(\w+)/) { $section=$1; } |
if (!defined($section) || $section eq '-1') { next; } |
if (!defined($section) || $section eq '-1') { next; } |
if (!defined($$sectioncount{$section})) { $numsections++; } |
$sectioncount{$section}++; |
$$sectioncount{$section}++; |
|
} |
} |
return $numsections; |
return %sectioncount; |
} |
} |
|
|
############################################### |
############################################### |
Line 3786 can be sent to &get_group_settings() to
|
Line 3834 can be sent to &get_group_settings() to
|
############################################### |
############################################### |
|
|
sub coursegroups { |
sub coursegroups { |
my ($curr_groups,$cdom,$cnum,$group) = @_; |
my ($cdom,$cnum,$group) = @_; |
my $numgroups; |
|
if (!defined($cdom) || !defined($cnum)) { |
if (!defined($cdom) || !defined($cnum)) { |
my $cid = $env{'request.course.id'}; |
my $cid = $env{'request.course.id'}; |
|
|
|
return if (!defined($cid)); |
|
|
$cdom = $env{'course.'.$cid.'.domain'}; |
$cdom = $env{'course.'.$cid.'.domain'}; |
$cnum = $env{'course.'.$cid.'.num'}; |
$cnum = $env{'course.'.$cid.'.num'}; |
} |
} |
%{$curr_groups} = &Apache::lonnet::get_coursegroups($cdom,$cnum,$group); |
my %curr_groups = &Apache::lonnet::get_coursegroups($cdom,$cnum,$group); |
my ($tmp) = keys(%{$curr_groups}); |
my ($tmp) = keys(%curr_groups); |
if ($tmp=~/^error:/) { |
if ($tmp=~/^(con_lost|no_such_host|error: [^2] )/) { |
unless ($tmp eq 'error: 2 tie(GDBM) Failed while attempting dump') { |
undef(%curr_groups); |
&logthis('Error retrieving groups: '.$tmp.' in '.$cnum.':'. |
&logthis('Error retrieving groups: '.$tmp.' in '.$cnum.':'.$cdom); |
$cdom); |
} elsif ($tmp=~/^error: 2 /) { |
} |
undef(%curr_groups); |
$numgroups = 0; |
|
} else { |
|
$numgroups = keys(%{$curr_groups}); |
|
} |
} |
return $numgroups; |
return %curr_groups; |
} |
} |
|
|
############################################### |
############################################### |