CLICK HERE TO BUY IT TODAY! OR GET IT FREE VIA TRIALPAY  

PHP Demo Application - Source Code

/Application/Controller/_Abstract.php

<?php
/**
* Script Contents: Apeel_Application_Controller_Abstract Class
* @package Apeel_Application_Controller
*/

/**
* Abstract Class containing core Front Controller functionality for the single 
* entry point into the application that handles requests and routes them to the
* appropriate physical documents.  

* It can accept requests in two ways.  The first has the index.php script
* in the url with the keywords after it seperated by keywords e.g.:
* http://www.mydomain.com/index.php/keyword1/keyword2?var1=A&var2=B
* this works on most hosting environments, though some old versions of IIS 
* may not support it.  

* The second, cleaner option is to exclude the script name, e.g.:
* http://www.mydomain.com/keyword1/keyword2?var1=A&var2=B

* This works on any hosting environment where .htaccess is supported and the 
* rewrite module turned on (primarily apache, though add-ons are available for
* IIS).

* Basically the .htaccess file redirects all requests to the chosen script
* (e.g. Index.php) transparently to the end user.  
*
* @package      Apeel_Application_Controller
* @version      1.1.0
* @author       John W. King (email: contact@apeelframework.net)
* @copyright    City Business Logic Limited 2001-2011
* @license      Dual MIT / GNU Lesser General Public License Version 3
*/
abstract class Apeel_Application_Controller_Abstract {
    
    
/**
    * An array of keywords extracted from URI request, and transformed to 
    * uppercase.  e.g. if the URL contains /admin/mydata then the first element
    * of the array would contain ADMIN and the second element MYDATA.  
    * 
    * @var array
    */
    
protected $_keywords NULL;
        

    
/**
    * Concrete class must implement this method which should read the first
    * keyword and call the appropriate method to deal process the next keyword.  
    * 
    * @return void
    */
    
public abstract function processRequest();
    
    
    
/**
    * Concrete class must implement this method which loads the default page of
    * the application, when for example no keywords are supplied and possibly
    * when invalid keywords are passed.  
    * 
    * @return void
    */
    
public abstract function routeDefault();
    
    
    
/**
    * Concrete class must implement this method to handle requests for 
    * Request Handler Objects (e.g. files, JSON data etc).  
    * 
    * @return void
    */
    
public abstract function routeRequest();
    

    
/**
    * Constructor contains the functionality to calculate base URL and PATH 
    * from the URI, and loads the core libraries using require function.  
    * 
    * $scriptName is the name of the single entry point script (usually 
    * Index.php) 
    * 
    * @param string $scriptName
    * @return void
    */
    
public function __construct($scriptName) {        
        
        
// Find out if mod_rewrite available
        
if (function_exists('apache_get_modules')) {            
            
$modules apache_get_modules();
            
$needIndex = !in_array('mod_rewrite'$modules);
            unset(
$modules);
        } else {
            
$needIndex = !getenv('HTTP_MOD_REWRITE')=='On' true false;
        }
        
        
// Get Server Variables
        
$SCRIPT_NAME = (!empty($_SERVER['SCRIPT_NAME'])) ? $_SERVER['SCRIPT_NAME'] : getenv('SCRIPT_NAME');
        
$SCRIPT_FILENAME = (!empty($_SERVER['SCRIPT_FILENAME'])) ? $_SERVER['SCRIPT_FILENAME'] : getenv('SCRIPT_FILENAME');
        
$REQUEST_URI = (!empty($_SERVER['REQUEST_URI'])) ? $_SERVER['REQUEST_URI'] : getenv('REQUEST_URI');
        
$HTTPS = (!empty($_SERVER['HTTPS'])) ? $_SERVER['HTTPS'] : getenv('HTTPS');
        
$SERVER_NAME = (!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : getenv('SERVER_NAME');
        
        
        
// Get Path Info       
        
$documentRoot str_ireplace($scriptName''$SCRIPT_FILENAME);
        
$webFolder str_ireplace('/' $scriptName''$SCRIPT_NAME);
        
$uriWithoutScript str_ireplace('/' $scriptName''$REQUEST_URI);

        
// Get URL Info
        
$urlBase = (!empty($HTTPS)) ? "https://".$SERVER_NAME "http://".$SERVER_NAME;
        
$url $urlBase $REQUEST_URI;

        
// Define Paths
        
define('APEEL_BASE_FILE_PATH'$documentRoot);
        
define('APEEL_BASE_URL_PATH'$webFolder '/');
        if (
$needIndex) {
            
define('APEEL_BASE_URL_PATH_WITH_SCRIPT'$SCRIPT_NAME '/');
            
define('APEEL_FULL_URL'$urlBase '/' $scriptName '/');
        } else {
            
define('APEEL_BASE_URL_PATH_WITH_SCRIPT'$webFolder '/');
            
define('APEEL_FULL_URL'$urlBase $webFolder '/');
        }
        
        
// Get Keywords
        
$keywords strtoupper(ltrim(rtrim(str_ireplace('~' $webFolder'''~' $uriWithoutScript),'/'),'/'));
        
$questionMark stripos($keywords'?');
        if (
$questionMark !=- false) {
            
$keywords substr($keywords0$questionMark);
        }        
        
$this->_keywords explode('/'$keywords);

        
// Get Configuration Data
        
require(APEEL_BASE_FILE_PATH 'Application/Model/MetaData/Configuration.php');        

        
// Load Libraries
        
require(APEEL_BASE_FILE_PATH 'Framework/Controller/Libraries/_Include.php');
        require(
APEEL_BASE_FILE_PATH 'Framework/Model/_Include.php');
        require(
APEEL_BASE_FILE_PATH 'Application/Model/_Include.php');
        
        
// If in Debug Mode, check for problems.  
        
if (APEEL_DEBUG_MODE) {
            
// Check PHP Version
            
$ver phpversion();
            if (
$ver) {
                
$ver explode('.'$ver);
                if (
$ver[0] < 5) {
                    
Apeel_Fatal_Error::show(sprintf("PHP Version 5 or later required. <br />Version %s installed.<br /><br /><strong>REMEDY:</strong> Please Upgrade to a newer version of PHP and try again"phpversion()));
                }
            }
            
            
// Ensure PDO Driver Installed
            
if (!in_array('PDO'get_declared_classes())) {
                    
Apeel_Fatal_Error::show(
                                                
"Your PHP PDO Driver required for Database Connections.<br /><br />" 
                                                
"<strong>DON'T WORRY - THERE IS AN EASY REMEDY!</strong><br /><br /> Open your PHP.INI file using notepad or another text editor<br />(If you are not sure of it's location please check 'Loaded Configuration File' value below)<br /><br />" 
                                                
"Search for the line containing: <br /><strong>extension=php_pdo.dll</strong><br /><br />and remove the semi-colon before it (if it has one).<br /><br />" 
                                                
"Also check that one of the following has no semi-colon prefix:<br /><br /><strong>extension=php_pdo_mysql.dll<br />extension=php_pdo_mysql_mysqlnd.dll<br />extension=php_pdo_mysql_libmysql.dll</strong><br /><br />" 
                                                
"Any of these 3 MySQL PDO drivers can be used.  If available then <strong>php_pdo_mysql_mysqlnd.dll</strong> is recommended for speed and stability, but either of the other two will also work.<br /><br />" 
                                                
"Save PHP.INI and restart your webserver - your web application should now work correctly.<hr />"
                                            
);
            }
            
            
// Ensure PDO MySQL Driver Installed
            
if (!in_array('mysql',PDO::getAvailableDrivers())) {
                    
Apeel_Fatal_Error::show(
                                                
"Your PHP PDO Driver is Installed, but there is no MySQL PDO driver.<br /><br />" 
                                                
"<strong>DON'T WORRY - THERE IS AN EASY REMEDY!</strong><br /><br /> Open your PHP.INI file using notepad or another text editor<br />(If you are not sure of it's location please check 'Loaded Configuration File' value below)<br /><br />" 
                                                
"Search for one of the following, and ensure that at least one of them has no semi-colon prefix:<br /><br /><strong>extension=php_pdo_mysql.dll<br />extension=php_pdo_mysql_mysqlnd.dll<br />extension=php_pdo_mysql_libmysql.dll</strong><br /><br />" 
                                                
"Any of these 3 MySQL PDO drivers can be used.  If available then <strong>php_pdo_mysql_mysqlnd.dll</strong> is recommended for speed and stability, but either of the other two will also work.<br /><br />" 
                                                
"Save PHP.INI and restart your webserver - your web application should now work correctly.<hr />"
                                            
);           
            }
        }            
                
        
$this->processRequest();
        
    }
    
    
    
/**
    * Returns protected $_keywords array containing keywords extracted from the
    * URI request transformed into uppercase.  
    * 
    * @return array
    */
    
public function getKeywords() {
        return 
$this->_keywords;
    }
    
    
    
/**
    * Loads page header, footer and body templates.  Uses Smarty templating
    * system to set values such as Page Title, Menu etc.  
    * 
    * @param string $pageToLoad
    * @param string $title
    * @param string $helpFile
    * @return void
    */
    
public function loadPage($pageToLoad$title$helpFile 'Default.html') {        
                
        
// Create instance of Smarty        
        // Smarty requires write access to templates_c folder.  When ready to enable Smarty
        // simply uncomment line below and comment the line after it.  
        //$smarty = new Smarty();
        
$smarty = new Apeel_Application_Templating();
        
        
// Set values
        
$smarty->assign('pageTitle'$title);
        
$smarty->assign('basePath'APEEL_BASE_URL_PATH);
        
$smarty->assign('applicationName'APEEL_APPLICATION_NAME);
        
        
// Check if logged in.  
        
if (Apeel_Framework_Controller_Libraries_Input::session('APEEL_LOGGED_IN'0)) {   
            
$menu file_get_contents(APEEL_PAGE_TEMPLATE_PATH '_loggedInMenu.html');
            
$menu str_ireplace('{$username}'strtoupper(Apeel_Framework_Controller_Libraries_Input::session('APEEL_USER_NAME')), $menu);
            
$menu str_ireplace('{$label_current_user}'APEEL_MENU_CURRENT_USER$menu);
            
$menu str_ireplace('{$label_home}'APEEL_MENU_HOME$menu);
            
$menu str_ireplace('{$label_admin}'APEEL_MENU_ADMIN$menu);
            
$menu str_ireplace('{$label_logout}'APEEL_MENU_LOGOUT$menu);
            
$menu str_ireplace('{$label_help}'APEEL_MENU_HELP$menu);
        } else {
            
$menu file_get_contents(APEEL_PAGE_TEMPLATE_PATH '_loggedOutMenu.html');
            
$menu str_ireplace('{$label_home}'APEEL_MENU_HOME$menu);
            
$menu str_ireplace('{$label_login}'APEEL_MENU_LOGIN$menu);
            
$menu str_ireplace('{$label_help}'APEEL_MENU_HELP$menu);
            
$menu str_ireplace('{$label_username}'APEEL_LOGIN_USERNAME$menu);
            
$menu str_ireplace('{$label_password}'APEEL_LOGIN_PASSWORD$menu);
        }      
        
        
// Set Menu
        
$menu str_ireplace('{$baseUrl}'APEEL_BASE_URL_PATH_WITH_SCRIPT$menu);
        
$menu str_ireplace('{$helpFile}'$helpFile$menu);
        
$smarty->assign('menu'$menu);
        
        
// Set Theme
        
$smarty->assign('theme'APEEL_THEME);
        
        
// Set Javascript Language
        
$smarty->assign('javascriptLanguage'APEEL_LANGUAGE_JAVASCRIPT);
        
        
// Set Character Set
        
$smarty->assign('charset'APEEL_PAGE_CHARSET);
        
        
// Output Template
        
$smarty->display(APEEL_PAGE_TEMPLATE_PATH '_PageHeader.tpl.html');
        
        
// Load main page and footer
        
require(APEEL_PAGE_TEMPLATE_PATH $pageToLoad);
        require(
APEEL_PAGE_TEMPLATE_PATH '_PageFooter.html');
    }
}

/**
* Smarty requires write access to folders e.g. templates_c for compilation
* and caching.  Until you require the additional functionality of Smarty
* this class can be used as a substitute.  

* @package      Apeel_Application_Templating
* @version      1.1.0
* @author       John W. King (email: contact@apeelframework.net)
* @copyright    City Business Logic Limited 2001-2011
* @license      Dual MIT / GNU Lesser General Public License Version 3 
*/
class Apeel_Application_Templating {

    private 
$indexes NULL;
    private 
$values NULL;
    
    public function 
assign($element$value) {
        
$this->indexes[] = '{$' $element '}';
        
$this->values[] = $value;
    }
    
    public function 
display($filename) {
        
$file file_get_contents($filename);        
        
$file str_ireplace($this->indexes$this->values$file);
        
header('Content-Type: text/html; charset=iso-8859-1');
        echo 
$file;
    }
    
}

class 
Apeel_Fatal_Error {

    public static function 
show($message) {
        
// Setup Page
        
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
        echo 
'<html xmlns="http://www.w3.org/1999/xhtml">';
        echo 
'<body style="background-color:#e0e0e0;text-align:center;">';
        echo 
'<div style="border: 1px solid black;padding:24px;margin-top: 24px; width: 976px; margin-left:auto; margin-right: auto;background-color:#c0c0c0;font-size:14pt;">';
        
        
// Output Message
        
echo "<h1 style='color:#ff0000;'>" APEEL_LANGUAGE_FATAL_ERROR "</h1>" $message;
        echo 
"<br /><br />" APEEL_LANGUAGE_NEED_HELP " <a href='http://www.phpcodegeneratorpro.com/support' style='background-color:transparent;color:#0000ff;' target='_blank'> City Business Logic " APEEL_LANGUAGE_TECHNICAL_SUPPORT_DEPARTMENT "</a>";
        
        
// Output Info
        
echo "<br /><br /><br />" APEEL_LANGUAGE_PHP_INFO ":<br />";
        
phpinfo();
        
        
// Output Footer
        
echo '</div></body></html>';
        
        exit;
    }
    
}

?>

PHP Demo Source Code Index