Report abuse

<?php
/**
 * My new Zend Framework project
 *
 * @author
 * @version
 */

define( 'ROOT', dirname( dirname( __FILE__ ) ) );
set_include_path(
	'.'
	. PATH_SEPARATOR . ROOT
	. PATH_SEPARATOR . ROOT . '/application/default'
	. PATH_SEPARATOR . ROOT . '/library'
	. PATH_SEPARATOR . ROOT . '/models'
	. PATH_SEPARATOR . ROOT . '/models/handlers'
	. PATH_SEPARATOR . '/usr/share/php/Zend/library'
	. PATH_SEPARATOR . '/usr/share/php/Doctrine/lib'
);

require_once 'Zend/Controller/Plugin/Abstract.php';
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Controller/Request/Abstract.php';
require_once 'Zend/Controller/Action/HelperBroker.php';

/**
 *
 * Initializes configuration depndeing on the type of environment
 * (test, development, production, etc.)
 *
 * This can be used to configure environment variables, databases,
 * layouts, routers, helpers and more
 *
 */
class Initializer extends Zend_Controller_Plugin_Abstract
{
    /**
     * @var Zend_Config
     */
    protected static $_config;

    /**
     * @var string Current environment
     */
    protected $_env;

    /**
     * @var Zend_Controller_Front
     */
    protected $_front;

    /**
     * @var string Path to application root
     */
    protected $_root;

    /**
     * Constructor
     *
     * Initialize environment, root path, and configuration.
     *
     * @param  string $env
     * @param  string|null $root
     * @return void
     */
    public function __construct($env, $root = null)
    {
        $this->_setEnv($env);
        if (null === $root) {
            $root = realpath(dirname(__FILE__) . '/../');
        }
        $this->_root = $root;

        $this->initPhpConfig();

        $this->_front = Zend_Controller_Front::getInstance();

        date_default_timezone_set( 'UTC' );


        // set the test environment parameters
        if ( $env == 'test') {
			// Enable all errors so we'll know when something goes wrong.
			error_reporting(E_ALL | E_STRICT);
			ini_set('display_startup_errors', 1);
			ini_set('display_errors', 1);

			$this->_front->throwExceptions(true);
        }

    	$configFile = dirname( __FILE__ ) . '/config.xml';

    	require_once 'Zend/Config/Xml.php';
    	self::$_config = new Zend_Config_Xml( $configFile, $this->_env );

    	require_once 'Zend/Registry.php';
    	Zend_Registry::set( 'Config', self::$_config );

    }

    /**
     * Initialize environment
     *
     * @param  string $env
     * @return void
     */
    protected function _setEnv($env)
    {
		$this->_env = $env;
    }


    /**
     * Initialize Data bases
     *
     * @return void
     */
    public function initPhpConfig()
    {

    }

    /**
     * Route startup
     *
     * @return void
     */
    public function routeStartup(Zend_Controller_Request_Abstract $request)
    {
    	$this->initApp();
       	$this->initDb();
        $this->initHelpers();
        $this->initView();
        $this->initPlugins();
        $this->initRoutes();
        $this->initControllers();
    }

    /**
     * Initialize configured application objects, such as backend cache object,
     * global logger, etc.
     *
     */
    public function initApp()
    {

    }

    /**
     * Initialize data bases
     *
     * @return void
     */
    public function initDb()
    {
        require_once 'Doctrine.php';
        spl_autoload_register( array( 'Doctrine', 'autoload' ) );

		Doctrine_Manager::connection( self::$_config->db->dsn );
		foreach( self::$_config->db->attributes as $key => $value ) {
		    Doctrine_Manager::getInstance()->setAttribute( $key, $value );
		}

		Doctrine::loadModels( array(
		    dirname( dirname( __FILE__ ) ) .'/models'
		) );

    }

    /**
     * Initialize action helpers
     *
     * @return void
     */
    public function initHelpers()
    {
    	// register the default action helpers
    	Zend_Controller_Action_HelperBroker::addPath(
    		'../application/default/helpers',
    		'Zend_Controller_Action_Helper'
    	);
    }

    /**
     * Initialize view
     *
     * @return void
     */
    public function initView()
    {
		// Bootstrap layouts
		$layout = Zend_Layout::startMvc(array(
		    'layoutPath' => $this->_root .  '/application/default/layouts',
		    'layout' => 'main'
		));

		$view = $layout->getView()
		    ->addHelperPath('Zend/Dojo/View/Helper/', 'Zend_Dojo_View_Helper');

		Zend_Dojo::enableView( $view );

    }

    /**
     * Initialize plugins
     *
     * @return void
     */
    public function initPlugins()
    {
        $this->_front->setDefaultModule( 'default' );
    }

    /**
     * Initialize routes
     *
     * @return void
     */
    public function initRoutes()
    {

    }

    /**
     * Initialize Controller paths
     *
     * @return void
     */
    public function initControllers()
    {
    	$this->_front->addControllerDirectory($this->_root . '/application/default/controllers', 'default');
    }
}