diff options
| author | Christian Schneider | 2006-10-26 13:35:12 +0000 | 
|---|---|---|
| committer | Christian Schneider | 2006-10-26 13:35:12 +0000 | 
| commit | a5a19fd672bc0b8113d620669b557f17dccd343a (patch) | |
| tree | 876ba4fec8362ac2e9374f61b9b7f67fcd2b8e59 /html_page.class | |
| download | itools-a5a19fd672bc0b8113d620669b557f17dccd343a.tar.gz itools-a5a19fd672bc0b8113d620669b557f17dccd343a.tar.bz2 itools-a5a19fd672bc0b8113d620669b557f17dccd343a.zip | |
Moved itools to live branch
Diffstat (limited to 'html_page.class')
| -rw-r--r-- | html_page.class | 214 | 
1 files changed, 214 insertions, 0 deletions
| diff --git a/html_page.class b/html_page.class new file mode 100644 index 0000000..88191d9 --- /dev/null +++ b/html_page.class @@ -0,0 +1,214 @@ +<?php +/* +**	$Id$ +** +**	ITools - the Internet Tools Library +** +**	Copyright (C) 1995-2003 by the ITools Authors. +**	This program is free software; you can redistribute it and/or +**	modify it under the terms of either the GNU General Public License +**	or the GNU Lesser General Public License, as published by the Free +**	Software Foundation. See http://www.gnu.org/licenses/ for details. +** +**      class it_html_page - Fairly generic HTML page Class +*/ + +class it_html_page +{ +	/* Public read-only */ +	var $title;			/* <title> of this page */ +	var $doctype;			/* Document type, will be reasonably initialized */ +	var $encoding;			/* If set, generate Content-Type HTTP/meta headers */ + +	var $url;			/* Site-relative URL of this page, without GET args */ +	var $remote_host;		/* IP address of caller (can deal with most proxies) */ + +	/* Private */ +	var $headers;			/* Header lines to output in <head> context */ +	var $meta_headers = array();	/* <meta name=.. content=..> tags in <head> context */ +	var $body_tags = array();	/* array of tags in <body statement */ +	var $body_start = "";		/* This is output immediately after <body> */ +	var $body_end = "";		/* Output immediately before </body> */ +	var $head_sent = 0;		/* 1 if <head> area already sent to client */ +	var $in_body = 0;		/* false=in header, true=in body */ +	var $in_input_tr = 0;		/* For input_text() */ + + + +/** + * Constructor + * @param $tags optional array of key => value pairs: title, doctype, encoding + */ +function it_html_page($tags='') +{ +	/* Set defaults */ +	$this->doctype = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">'; + +	/* Determine the relative URL of this page for self-reference */ +	if (isset($_SERVER['SCRIPT_URL'])) +		$this->url = $_SERVER['SCRIPT_URL']; +	else +	{ +		list($this->url) = explode("?", $_SERVER['REQUEST_URI']); +		$this->url = substr(strrchr($this->url, "/"), 1);	/* $$$ what's this?? */ +	} + +	/* This is needed for POST requests to oneself */ +	if ($this->url == "") +		$this->url = "./"; + +	/* Determine IP address of caller */ +	if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && ereg('^([0-9.]{7,15})', $_SERVER['HTTP_X_FORWARDED_FOR'], $regs)) +	        $this->remote_host = trim($regs[1]); +	else +        	$this->remote_host = $_SERVER['REMOTE_ADDR']; + +	/* Is this a good idea? */ +	$this->add_meta_header('generator', '$Id$'); + +	/* Override defaults with user tags */ +	if (is_array($tags)) +		foreach($tags as $key => $value) +			$this->$key = $value; + +	if (isset($this->encoding)) +	{ +		$ct = 'text/html; charset='.$this->encoding; +		header('Content-Type: '.$ct); +		$this->add_header('<meta http-equiv="Content-Type" content="'.$ct.'">'); +	} +} + + +/** + * Set the title of the page + */ +function set_title($title) +{ +	$this->title = $title; +} + + +/** + * Add a line to the header area and trim it + */ +function add_header($header) +{ +	$this->headers .= trim($header)."\n"; +} + + +/** + * Add a meta header. + * If a header with the same name exists, overwrite it. + */ +function add_meta_header($name, $value) +{ +	$this->meta_headers[strtolower($name)] = $value; +} + + +/** + * Add a tag=value pair in <body context. + * If a header with the same name exists, overwrite it. + */ +function add_body_tag($name, $value) +{ +	$this->body_tags[strtolower($name)] = $value; +} + + +/** + * Add a line to the body area after other lines that were added + */ +function add_body_start($html) +{ +	$this->body_start .= $html; +} + + +/** + * Add a line to the body end area before other lines that were added + */ +function add_body_end($html) +{ +	$this->body_end = $html . $this->body_end; +} + + +/** + * Write out HTML <head> section, if not already done. + */ +function head() +{ +	/* This function can be called multiple times, no harm is done. */ +	if (!$this->head_sent) +	{ +		$lang = $this->language ? " lang='$this->language'" : ""; + +		if (!$GLOBALS['SENT_PREAMBLE']) /* RELOAD_MAGIC already sent <html><head> */ +			echo $this->doctype, "\n<html$lang>\n<head>\n"; + +		if ($this->title) +			echo '<title>'.$this->title."</title>\n"; + +		echo $this->headers; + +		while (list($name, $content) = each($this->meta_headers)) +			echo "<meta name=\"$name\" content=\"$content\">\n";  + +		echo "</head>\n"; +		$this->head_sent = 1; +	} +} + + +/** + * Write out HTML <head> section and body start, if not already done. + * @param ... If parameters are present, output them and call end() + */ +function body() +{ +	/* Write out header part */ +	$this->head(); + +	/* This function can be called multiple times, no harm is done. */ +	if (!$this->in_body) +	{ +		echo '<body'; + +		while (list($tag, $value) = each($this->body_tags)) +			echo " $tag=\"$value\"";  + +		echo ">\n".$this->body_start; +		$this->in_body = 1; + +		if ($args = func_get_args()) +		{ +			foreach($args as $arg) +				echo $arg; +			$this->end(); +		} +	} +} + + +/** + * End a HTML page. + */ +function end() +{ +	$this->head(); + +	if ($this->in_body) +	{ +		echo $this->body_end."</body>\n"; +		$this->in_body = 0; +	} + +	echo "</html>\n"; +} + + +} /* End class it_html_page */ +?> |