Here is the Page class. It may run out to the right a bit.


<?
/*
##################################################
#
# Filename..........: $RCSfile: Page.class,v $
# Original Author...: Anthony L. Awtrey
# Version...........: $Revision: 0.1 $
# Last Modified By..: $Author: aawtrey $
# Last Modified.....: $Date: 2006/09/21 18:15:56 $
#
# Copyright 2006 Anthony Awtrey
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
*/

/*
 * Simple templating system for this web application.
 */
class Page {

  var 
$template "default.tpl";
  var 
$relpath;
  var 
$reluri;
  var 
$relfile;
  var 
$title    "Worship Organizer";
  var 
$header;
  var 
$description;
  var 
$favicon  "/favicon.ico";
  var 
$keywords "jesus,christ,worship,hymn,anthem,lectionary,revised common lectionary,prebyterian,pcusa";
  var 
$colors   = array(
                       
'BACKGROUND_COLOR'   => "#FFFFFF",
                       
'ACCENT_COLOR'       => "#F0FFF0",
                       
'HEADING_COLOR'      => "#009000",
                       
'TEXT_COLOR'         => "#000000",
                       
'REGULAR_LINK_COLOR' => "#009000",
                       
'VISITED_LINK_COLOR' => "#009000",
                       
'ACTIVE_LINK_COLOR'  => "#00FF00",
                       
'HOVER_LINK_COLOR'   => "#00FF00"
                       
);
  var 
$menu     = array();
  var 
$content;

  
/*
   * Class initialization
   */
  
function Page() {
    global 
$_SERVER;
    global 
$_SESSION;
    global 
$_SERVER;
    global 
$_POST;
    global 
$_GET;
    if ( 
is_file("menu.ini") ) {
      include_once(
"menu.ini");
      
$this->menu $menu;
    }
    
$this->relpath constant("RELPATH");
    
$this->reluri  constant("RELURI");
    if ( 
defined("RELFILE") ) {
      
$this->relfile constant("RELFILE");
    }
  }

  
/*
   * Generates the side menu based on login status and the contents of the
   * 'menu.ini' file.
   */
  
function generate_menu() {
    
$output  "    <h2>Menu</h2>n";
    
$output .= "    <ul>n";
    if ( 
$this->relpath == "" && $this->relfile == "" ) {
      
$output .= "      <li>Home</li>n";
    } elseif ( 
$this->relfile != "" ) {
      
$output .= "      <li><a href="./">Back</a></li>n";
    } else {
      
$output .= "      <li><a href="../">Back</a></li>n";
    }
    if ( 
count($this->menu) > ) {
      while ( list(
$key,$val) = each ($this->menu) ) {
        if ( @
ereg($val,basename($_SERVER["SCRIPT_FILENAME"])) ) {
          
$output .= "      <li>$key</li>n";
        } else {
          
$output .= "      <li><a href="$val">$key</a></li>n";
        }
      }
    }
    
$output .= "    </ul>n";
    if ( 
$_SESSION['login'] ) {
      
$output .= "    <ul>n";
      
$account = new Data("account");
      
$result $account->get_record_by_id($_SESSION['login']);
      
$output .= "      " $result['name'] . "<br />n";
      
$output .= "      <li><a href="" $this->relpath "account.php?action=edit">Change Information</a></li>n";
      
$output .= "      <li><a href="" $this->relpath "account.php?action=logout&backto=" $this->reluri "">Logout</a></li>n";
      
$output .= "    </ul>n";
    } elseif ( 
$this->relpath == "" && $this->relfile == "account.php" ) {
      
// display nothing
    
} else {
      
$output .= "    <ul>n";
      
$output .= "      <li><a href="" $this->relpath "account.php?backto=" $this->reluri "">Login</a></li>n";
      
$output .= "    </ul>n";
    }
    return(
$output);
  }

  
/*
   * Replaces the tokens in the template with the stored content and then
   * displays the page to the browser.
   */
  
function display($html2str=0) {
    if ( 
$this->template == 'blank' ) {
      
$this_page $this->content;
    } else {
      
$this_page file_get_contents($this->template,true);
      
$this_page = @ereg_replace("[RELPATH]","$this->relpath",$this_page);
      
$this_page = @ereg_replace("[TITLE]","$this->title",$this_page);
      
$this_page = @ereg_replace("[FAVICON]","$this->favicon",$this_page);
      while ( list(
$key,$val) = each ($this->colors) ) {
        
$this_page = @ereg_replace("[$key]","$val",$this_page);
      }
      
$this_page = @ereg_replace("[DESCRIPTION]","$this->description",$this_page);
      
$this_page = @ereg_replace("[KEYWORDS]","$this->keywords",$this_page);
      
$this_page = @ereg_replace("[HEADER]","$this->header",$this_page);
      
$this_page = @ereg_replace("[MENU]",$this->generate_menu(),$this_page);
      
$this_page = @ereg_replace("[CONTENT]","$this->content",$this_page);
      
$this_page = @ereg_replace("[YEAR]",date("Y"),$this_page);
      
$this_page = @ereg_replace("[LAST_MODIFIED]",date("H:i Y/m/d",filemtime(basename($_SERVER['SCRIPT_FILENAME']))),$this_page);
    }
    
$this_page stripslashes($this_page);
    if ( 
$html2str == ) {
      
$this_page htmlentity2str($this_page);
    }
    echo 
$this_page;
    exit;
  }

}

?>