Source for file page_header.php
Documentation is available at page_header.php
* Prints the page header (duh)
* @copyright © 1999-2006 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id: page_header.php,v 1.227 2006/10/04 19:12:09 stevetruckstuff Exp $
/** Include required files from SM */
include_once(SM_PATH .
'functions/imap_mailbox.php');
* Output a SquirrelMail page header, from <!doctype> to </head>
* Always set up the language before calling these functions.
* Since 1.5.1 function sends http headers. Function should be called
* before any output is started.
* @param string title the page title, default SquirrelMail.
* @param string xtra extra HTML to insert into the header
* @param bool do_hook whether to execute hooks, default true
* @param bool frames generate html frameset doctype (since 1.5.1)
function displayHtmlHeader( $title =
'SquirrelMail', $xtra =
'', $do_hook =
TRUE, $frames =
FALSE ) {
global $squirrelmail_language, $sTemplateID, $oErrorHandler, $oTemplate;
global $custom_css, $pageheader_sent, $theme, $theme_default, $text_direction,
/* add no cache headers here */
//FIXME: should change all header() calls in SM core to use $oTemplate->header()!!
$oTemplate->header('Pragma: no-cache'); // http 1.0 (rfc1945)
$oTemplate->header('Cache-Control: private, no-cache, no-store'); // http 1.1 (rfc2616)
$oTemplate->assign('frames', $frames);
$oTemplate->assign('lang', $squirrelmail_language);
$header_tags .=
"<meta name=\"robots\" content=\"noindex,nofollow\">\n";
$used_fontset =
(!empty($chosen_fontset) ?
$chosen_fontset :
$default_fontset);
$used_fontsize =
(!empty($chosen_fontsize) ?
$chosen_fontsize :
$default_fontsize);
$used_theme =
!isset
($chosen_theme) &&
$user_theme_default !=
'none' ?
'u_'.
$user_themes[$user_theme_default]['PATH'] :
$chosen_theme_path;
* Stylesheets are loaded in the following order:
* 1) All stylesheets provided by the template. Normally, these are
* stylsheets in templates/<template>/css/. This is accomplished by calling
* $oTemplate->fetch_standard_stylesheet_links().
* 2) An optional user-defined stylesheet. This is set in the Display
* 3) src/style.php which sets some basic font prefs.
* 4) If we are dealing with an RTL language, we load rtl.css from the
// 1. Stylesheets from the template.
$header_tags .=
$oTemplate->fetch_standard_stylesheet_links();
// 2. Option user-defined stylesheet from preferences.
// FIXME: the following user pref ("sUserStyle"; rename as necessary) will have to be populated by the display prefs screen from a widget similar to the color themes widget (which it replaces) where its values should be full relative paths (from SM_PATH) to the selected css "themes" (either in template css/alternates dir or SM_PATH/css/alternates dir)
// FIXME: uhhh, getPref() is not available yet here. (at least on login page) Ugh. Nor has load_prefs been included yet -- how do we fix this?
// $aUserStyles[] = getPref($data_dir, $username, 'sUserStyle', '');
// Steve, can you please document what u_ means? Will it work with the
// new template inheritance system and auto-detection of alternate sheets?
* Stylesheets beginning with a "u_" == user provided stylesheets, e.g. those
* in SM_PATH/css/. Template provided stylesheets (TEMPLATE_DIR/css/alternatives/)
* should begin with 't_'. This was the initial path I took to get it working
* since I wasn't sure what mods to the Template class would be used to handle
* template-provided alt stylesheets.
* TODO: Re-evaluate this naming convetion.
if (!empty($used_theme)) {
if (substr($used_theme, 0, 2) ==
'u_') {
$aUserStyles[] =
substr($used_theme, 2) .
'/default.css';
} elseif (substr($used_theme, 0, 2) ==
't_') {
$aUserStyles[] =
SM_PATH .
$oTemplate->get_template_file_directory().
'css/alternates/'.
substr($used_theme, 2);
# $aUserStyles[] = substr($used_theme, 2);
$aUserStyles[] =
$base_uri .
'src/style.php?'
.
(!empty($used_fontset) ?
'&fontset='.
$used_fontset :
'')
.
(!empty($used_fontsize) ?
'&fontsize='.
$used_fontsize :
'');
// 3.1. Load the stylesheets we have already
$header_tags .=
$oTemplate->fetch_external_stylesheet_links($aUserStyles);
// 4. Optional rtl.css stylesheet
if ($text_direction ==
'rtl') {
$header_tags .=
$oTemplate->fetch_right_to_left_stylesheet_link();
if ($squirrelmail_language ==
'ja_JP') {
* force correct detection of charset, when browser does not follow
* http content-type and tries to detect charset from page content.
* Shooting of browser's creator can't be implemented in php.
* We might get rid of it, if we follow http://www.w3.org/TR/japanese-xml/
* recommendations and switch to unicode.
$header_tags .=
"<!-- \xfd\xfe -->\n";
$header_tags .=
'<meta http-equiv="Content-type" content="text/html; charset=euc-jp">' .
"\n";
// NOTE! plugins here must assign output to template
// and NOT echo anything directly!!
$oTemplate->assign('page_title', $title);
/* work around IE6's scrollbar bug */
/*
avoid stupid IE6 bug with frames and scrollbars */
width:
expression(
document.
documentElement.
clientWidth - 30);
$oTemplate->assign('header_tags', $header_tags);
$oTemplate->display('protocol_header.tpl');
/* this is used to check elsewhere whether we should call this function */
if (isset
($oErrorHandler)) {
$oErrorHandler->HeaderSent();
* Given a path to a SquirrelMail file, return a HTML link to it
* @param string path the SquirrelMail file to link to
* @param string text the link text
* @param string target the target frame for this link
// sqgetGlobalVar('base_uri', $base_uri, SQ_SESSION);
$target =
" target=\"$target\"";
// This is an inefficient hook and is only used by
// one plugin that still needs to patch this code,
// plus if we are templat-izing SM, visual hooks
// are not needed. However, I am leaving the code
// here just in case we find a good (non-visual?)
// use for the internal_link hook.
//$hooktext = do_hook_function('internal_link',$text);
return '<a href="'.
$base_uri.
$path.
'"'.
$target.
'>'.
$text.
'</a>';
* Same as makeInternalLink, but echoes it too
// FIXME: should let the template echo all these kinds of things
* Outputs a complete SquirrelMail page header, starting with <!doctype> and
* including the default menu bar. Uses displayHtmlHeader and takes
* JavaScript and locale settings into account.
* @param array color the array of theme colors
* @param string mailbox the current mailbox name to display
* @param string sHeaderJs javascipt code to be inserted in a script block in the header
* @param string sBodyTagJs js events to be inserted in the body tag
$javascript_on, $action, $oTemplate;
if (empty($sBodyTagJs)) {
if (strpos($action, 'reply') !==
FALSE &&
$reply_focus) {
if ($reply_focus ==
'select')
$sBodyTagJs =
'onload="checkForm(\'select\');"';
else if ($reply_focus ==
'focus')
$sBodyTagJs =
'onload="checkForm(\'focus\');"';
else if ($reply_focus !=
'none')
$sBodyTagJs =
'onload="checkForm();"';
$sBodyTagJs =
'onload="checkForm();"';
$startMessage = (int)
$startMessage;
if (!isset
($frame_top)) {
if( $javascript_on ||
strpos($sHeaderJs, 'new_js_autodetect_results.value') ) {
$js_includes =
$oTemplate->get_javascript_includes(TRUE);
foreach ($js_includes as $js_file) {
$sJsBlock .=
'<script src="'.
$js_file.
'" type="text/javascript"></script>' .
"\n";
$sJsBlock .=
"\n<script type=\"text/javascript\">" .
$sHeaderJs .
"\n\n// -->\n</script>\n";
/* do not use JavaScript */
* this explains the imap_mailbox.php dependency. We should instead store
* the selected mailbox in the session and fallback to the session var.
if ( $shortBoxName ==
'INBOX' ) {
$shortBoxName =
_("INBOX");
if (!$hide_sm_attributions) {
$sm_attributes .=
'<td class="sqm_providerInfo">' .
"\n";
if (empty($provider_uri)) {
$sm_attributes .=
' <a href="about.php">SquirrelMail</a>';
if (empty($provider_name)) $provider_name=
'SquirrelMail';
$sm_attributes .=
' <a href="'.
$provider_uri.
'" target="_blank">'.
$provider_name.
'</a>'.
"\n";
$sm_attributes .=
" </td>\n";
$oTemplate->assign('body_tag_js', $sBodyTagJs);
$oTemplate->assign('shortBoxName', $shortBoxName);
$oTemplate->assign('sm_attribute_str', $sm_attributes);
$oTemplate->assign('frame_top', $frame_top);
$oTemplate->assign('urlMailbox', $urlMailbox);
$oTemplate->assign('startMessage', $startMessage);
$oTemplate->assign('hide_sm_attributions', $hide_sm_attributions);
$oTemplate->display('page_header.tpl');
* Blatantly copied/truncated/modified from displayPageHeader.
* Outputs a page header specifically for the compose_in_new popup window
* @param array color the array of theme colors
* @param string mailbox the current mailbox name to display
* @param string sHeaderJs javascipt code to be inserted in a script block in the header
* @param string sBodyTagJs js events to be inserted in the body tag
function compose_Header($color, $mailbox, $sHeaderJs=
'', $sBodyTagJs =
'') {
global $reply_focus, $javascript_on, $action, $oTemplate;
if (empty($sBodyTagJs)) {
if (strpos($action, 'reply') !==
FALSE &&
$reply_focus) {
if ($reply_focus ==
'select')
$sBodyTagJs =
'onload="checkForm(\'select\');"';
else if ($reply_focus ==
'focus')
$sBodyTagJs =
'onload="checkForm(\'focus\');"';
else if ($reply_focus !=
'none')
$sBodyTagJs =
'onload="checkForm();"';
$sBodyTagJs =
'onload="checkForm();"';
* Locate the first displayable form element (only when JavaScript on)
$sJsBlock =
"\n<script type=\"text/javascript\">" .
$sHeaderJs .
"\n\n// -->\n</script>\n";
$js_includes =
$oTemplate->get_javascript_includes(TRUE);
foreach ($js_includes as $js_file) {
$sJsBlock .=
'<script src="'.
$js_file.
'" type="text/javascript"></script>' .
"\n";
// FIXME: should let the template echo all these kinds of things
echo
"<body text=\"$color[8]\" bgcolor=\"$color[4]\" link=\"$color[7]\" vlink=\"$color[7]\" alink=\"$color[7]\" $sBodyTagJs>\n\n";
Documentation generated on Sat, 07 Oct 2006 16:12:58 +0300 by phpDocumentor 1.3.0RC6