2 /* vim: set expandtab tabstop=4 shiftwidth=4: */
3 // +----------------------------------------------------------------------+
5 // +----------------------------------------------------------------------+
6 // | Copyright (c) 1997-2002 The PHP Group |
7 // +----------------------------------------------------------------------+
8 // | This source file is subject to version 2.02 of the PHP license, |
9 // | that is bundled with this package in the file LICENSE, and is |
10 // | available at through the world-wide-web at |
11 // | http://www.php.net/license/2_02.txt. |
12 // | If you did not receive a copy of the PHP license and are unable to |
13 // | obtain it through the world-wide-web, please send a note to |
14 // | license@php.net so we can mail you a copy immediately. |
15 // +----------------------------------------------------------------------+
16 // | Authors: Alan Knowles <alan@akbkhome.com> |
17 // +----------------------------------------------------------------------+
19 // $Id: Page.php,v 1.5 2003/02/22 01:52:50 alan Exp $
21 // A Base Page Class for use with HTML_Template_Flexy
22 // You could write one of these which used another template engine.
26 require_once 'HTML/Template/Flexy.php' ;
27 require_once 'HTML/Template/Flexy/Factory.php' ;
30 * The Base Page class - extend and override the methods to implement your own pages.
35 class HTML_FlexyFramework_Page {
39 * the main Template name (which can include a body template)
41 * @var string template name
44 var $masterTemplate = "master.html";
46 * the body Template name
48 * @var string template name
51 var $template = "error.html";
58 * can be 'output', or 'data'
59 * used to set a default caching method
65 var $cacheMethod = '';
71 * cache store (PEAR's Cache Object Instance
72 * initialized at start
73 * set at output stage.
82 /* ---- Variables set by Page loader -------- */
87 * baseURL, that can be prefixed to URL's to ensure that they correctly relate to application
88 * (set by page loader)
94 * rootURL, the base installation directory - can be used to get images directories.
95 * (set by page loader)
101 * rootDir, the base installation directory - can be used to find relative files.
102 * (set by page loader)
108 * the full request string used by the getCacheID().
109 * (set by page loader)
113 var $request; // clean page request for page
115 * overrides for elements.
120 var $elements = array(); // key=>HTML_Template_Flexy_Element
123 * errors for elements
128 var $errors = array(); // key(element name)=>error message
131 * The default page handler
132 * by default relays to get(), or post() methods depending on the request.
134 * Override this if you do not handle get or post differently.
137 * @param string request, the remainder of the request not handled by the object.
139 * @return none|string none = handled, string = redirect to another page = eg. data/list
143 function start($request,$isRedirect=false,$args=array())
145 if (!$isRedirect && !empty($_SERVER["REQUEST_METHOD"]) && $_SERVER["REQUEST_METHOD"] == "POST") {
146 return $this->post($request,$args);
148 return $this->get($request,$args);
152 * The get page handler
154 * Override this if you want to handle get requests
157 * @param string request, the remainder of the request not handled by the object.
159 * @return none|string none = handled, string = redirect to another page = eg. data/list
162 function get($request)
166 * The post page handler
168 * Override this if you want to handle get requests
171 * @param string request, the remainder of the request not handled by the object.
173 * @return none|string none = handled, string = redirect to another page = eg. data/list
176 function post($request)
180 * Authentication Check method
181 * Override this with a straight return for pages that do not require authentication
184 * a) redirects to login if authenticaiton fails
185 * b) checks to see if a isAdmin method exists on the auth object
186 * if it does see if the user is admin and let them in.
187 * otherwise access denied error is raised
192 * @return none or string redirection to another page.
207 * The master Output layer.
209 * compiles the template
210 * if no caching - just runs the template.
211 * otherwise stores it in the cache.
213 * you dont normally need to override this.
215 * called by the page loader.
223 /* output the body if no masterTemplate is set */
224 $options = PEAR::getStaticProperty('HTML_FlexyFramework','options');
227 header('Content-Type: text/html;charset='.( empty($options['charset']) ? 'UTF-8' : $options['charset'] ));
230 if (!$this->masterTemplate) {
231 return $this->outputBody();
233 /* master template */
236 $template_engine = new HTML_Template_Flexy();
237 $template_engine->compile($this->masterTemplate);
238 if (!$this->_cache || !$this->cacheMethod) {
\r
239 $template_engine->outputObject($this,$this->elements);
243 $id = $this->_cache->generateID($this->getID());
244 $this->_cache->save($id, $template_engine->bufferedOutputObject($this,$this->elements));
245 echo $this->_cache->get($id);
249 * The body Output layer.
251 * compiles the template
252 * At present there is no caching in here.. - this may change latter..
254 * used by putting {outputBody} in the main template.
257 function outputBody() {
259 $template_engine = new HTML_Template_Flexy();
260 $template_engine->compile($this->template);
261 if ($this->elements) { /* BC crap! */
262 $this->elements = HTML_Template_Flexy_Factory::setErrors($this->elements,$this->errors);
264 $template_engine->elements = $this->elements;
265 $template_engine->outputObject($this,$this->elements);
271 * Do any Page Caching if $this->cacheMethod is set.
272 * You should also look at output caching by overriding the outputBody Method.
274 * Note that Caching is disabled in a number of situations.
275 * a) cacheMethod is empty
277 * c) if sess is set (Eg. if you are using sessions)
278 * d) useCache is not set in the [Cache] section of the config.
280 * utilizes $this->getCacheID() to
282 * @return none|boolean|string|int|object Description
283 * @access public|private
284 * @see see also methods.....
288 function getCache() {
289 if (!$this->cacheMethod) {
292 if ($_SERVER["REQUEST_METHOD"] == "POST") {
296 /* lets assume we can cache ourselves.. */
297 $coptions = PEAR::getStaticProperty('Cache','options');
301 if (empty($coptions['useCache'])) {
304 require_once 'Cache.php';
306 $this->_cache = new Cache($coptions['container'], $coptions);
307 $id = $this->_cache->generateID($this->getCacheID());
308 if ($_SERVER["REQUEST_METHOD"] == "POST") {
309 $this->_cache->flush($id);
312 if ($data = $this->_cache->get($id)) {
320 * Get a distinct Page Cache ID.
322 * By default this is the full request string
323 * override this to define a more precise string
325 * @return string distinct page id (eg. the request url)
329 function getCacheID() {
330 return $this->request;
336 * Utility method : get the Class name (used on templates)
338 * @return string class name
343 function getClass() {
344 return get_class($this);
347 * Utility method : get the Time taken to generate the page.
349 * @return string time in seconds..
355 $m = explode(' ',microtime());
356 return sprintf('%0.2fs',($m[0] + $m[1]) - HTML_FlexyFramework::get()->start)
357 . '/ Files ' . count(get_included_files());