View Source

/hsphere/local/home/c251266/sunsetvines.com/www.sunsetvines.com/sunsetvines/current/vendor/creovel/classes/controller.php (8.330 KB)

#0001  
#0002  
#0003  
#0004  
#0005  
#0006  
#0007  
#0008  
#0009  
#0010  
#0011  
#0012  
#0013  
#0014  
#0015  
#0016  
#0017  
#0018  
#0019  
#0020  
#0021  
#0022  
#0023  
#0024  
#0025  
#0026  
#0027  
#0028  
#0029  
#0030  
#0031  
#0032  
#0033  
#0034  
#0035  
#0036  
#0037  
#0038  
#0039  
#0040  
#0041  
#0042  
#0043  
#0044  
#0045  
#0046  
#0047  
#0048  
#0049  
#0050  
#0051  
#0052  
#0053  
#0054  
#0055  
#0056  
#0057  
#0058  
#0059  
#0060  
#0061  
#0062  
#0063  
#0064  
#0065  
#0066  
#0067  
#0068  
#0069  
#0070  
#0071  
#0072  
#0073  
#0074  
#0075  
#0076  
#0077  
#0078  
#0079  
#0080  
#0081  
#0082  
#0083  
#0084  
#0085  
#0086  
#0087  
#0088  
#0089  
#0090  
#0091  
#0092  
#0093  
#0094  
#0095  
#0096  
#0097  
#0098  
#0099  
#0100  
#0101  
#0102  
#0103  
#0104  
#0105  
#0106  
#0107  
#0108  
#0109  
#0110  
#0111  
#0112  
#0113  
#0114  
#0115  
#0116  
#0117  
#0118  
#0119  
#0120  
#0121  
#0122  
#0123  
#0124  
#0125  
#0126  
#0127  
#0128  
#0129  
#0130  
#0131  
#0132  
#0133  
#0134  
#0135  
#0136  
#0137  
#0138  
#0139  
#0140  
#0141  
#0142  
#0143  
#0144  
#0145  
#0146  
#0147  
#0148  
#0149  
#0150  
#0151  
#0152  
#0153  
#0154  
#0155  
#0156  
#0157  
#0158  
#0159  
#0160  
#0161  
#0162  
#0163  
#0164  
#0165  
#0166  
#0167  
#0168  
#0169  
#0170  
#0171  
#0172  
#0173  
#0174  
#0175  
#0176  
#0177  
#0178  
#0179  
#0180  
#0181  
#0182  
#0183  
#0184  
#0185  
#0186  
#0187  
#0188  
#0189  
#0190  
#0191  
#0192  
#0193  
#0194  
#0195  
#0196  
#0197  
#0198  
#0199  
#0200  
#0201  
#0202  
#0203  
#0204  
#0205  
#0206  
#0207  
#0208  
#0209  
#0210  
#0211  
#0212  
#0213  
#0214  
#0215  
#0216  
#0217  
#0218  
#0219  
#0220  
#0221  
#0222  
#0223  
#0224  
#0225  
#0226  
#0227  
#0228  
#0229  
#0230  
#0231  
#0232  
#0233  
#0234  
#0235  
#0236  
#0237  
#0238  
#0239  
#0240  
#0241  
#0242  
#0243  
#0244  
#0245  
#0246  
#0247  
#0248  
#0249  
#0250  
#0251  
#0252  
#0253  
#0254  
#0255  
#0256  
#0257  
#0258  
#0259  
#0260  
#0261  
#0262  
#0263  
#0264  
#0265  
#0266  
#0267  
#0268  
#0269  
#0270  
#0271  
#0272  
#0273  
#0274  
#0275  
#0276  
#0277  
#0278  
#0279  
#0280  
#0281  
#0282  
#0283  
#0284  
#0285  
#0286  
#0287  
#0288  
#0289  
#0290  
#0291  
#0292  
#0293  
#0294  
#0295  
#0296  
#0297  
#0298  
#0299  
#0300  
#0301  
#0302  
#0303  
#0304  
#0305  
#0306  
#0307  
#0308  
#0309  
#0310  
#0311  
#0312  
#0313  
#0314  
#0315  
#0316  
#0317  
#0318  
#0319  
#0320  
#0321  
#0322  
#0323  
#0324  
#0325  
#0326  
#0327  
#0328  
#0329  
#0330  
#0331  
#0332  
#0333  
#0334  
#0335  
#0336  
#0337  
#0338  
#0339  
#0340  
#0341  
#0342  
#0343  
#0344  
#0345  
#0346  
#0347  
#0348  
#0349  
#0350  
#0351  
#0352  
#0353  
#0354  
#0355  
#0356  
#0357  
#0358  
#0359  
#0360  
#0361  
#0362  
#0363  
#0364  
#0365  
#0366  
#0367  
#0368  
#0369  
#0370  
#0371  
#0372  
<?php
/**
* Class to handle all intreaction between models, views, and controllers

* @todo filiters
*/
class controller
{

    
/**
     * Controller name
     *
     * @author Nesbert Hidalgo
     * @access protected
     * @var string
     */
    
protected $_controller;
    
    
/**
     * Action name
     *
     * @author Nesbert Hidalgo
     * @access protected
     * @var string
     */
    
protected $_action;
    
    
/**
     * Page to be outputted
     *
     * @author Nesbert Hidalgo
     * @access public
     * @var string
     */
    
public $render;
    
    
/**
     * Layout name
     *
     * @author Nesbert Hidalgo
     * @access public
     * @var string
     */    
    
public $layout;
    
    
/**
     * Array of all server-side requests
     *
     * @author Nesbert Hidalgo
     * @access public
     * @var array
     */    
    
public $params;
    
    
/**
     * Set the controller's events and layout
     *
     * @author Nesbert Hidalgo
     * @access public 
     */
    
public function _set_events($events)
    {
        
$this->_controller $events['controller'];
        
$this->_action $events['action'];
        if (!
$this->render$this->render $events['action'];
        if (!
$this->layout$this->layout $_ENV['routes']['default']['layout'];
        
$this->_nested_controller_path $events['nested_controller_path'];
    }

    
/**
     * Set the controller's params
     *
     * @author Nesbert Hidalgo
     * @access public 
     */
    
public function _set_params($params)
    {
        
$this->params $params;
    }

    
/**
     * Executes the controller's action.
     *
     * @author John Faircloth, Nesbert Hidalgo
     * @access public 
     */
    
public function _execute_action()
    {
        try {
            
            if ( 
method_exists($this$this->_action) ) {
            
                
// call before filter
                
$this->before_filter();
            
                
// controller execute action
                
$action $this->_action;
                
$this->$action();
                
                
// call before filter
                
$this->after_filter();
                
            } else {
                throw new 
Exception("Action '{$this->_action}' not found in <strong>{$this->_controller}_controller</strong>");
            }
            
        } catch ( 
Exception $e ) {
        
            
// add to errors
            
$_ENV['error']->add($e->getMessage(), $e);
        
        }        
    }
    
    
/**
     * Output contents to user
     *
     * @author Nesbert Hidalgo
     * @access public
     * @param bool $return_as_str
     * @return mixed
     */
    
public function _output($return_as_str)
    {
        
// set options for view
        
$options['controller'] = $this->_controller;
        
$options['action'] = $this->_action;
        
$options['layout'] = $this->layout;
        
$options['render'] = $this->render;
        
$options['text'] = $this->render_text;
        return 
$this->render($options);        
    }
    
    
/**
     * Get the path of the view file
     *
     * @author Nesbert Hidalgo
     * @access private
     * @param string $view
     * @param string $controller
     * @return string
     */
    
private function _get_view_path($view null$controller null)
    {
        
// nested controllers check [NH] might need to find a better way to do this
        
if ( $this->_nested_controller_path ) {
            
$view_path =  VIEWS_PATH.$this->_nested_controller_path.( $controller $controller $this->_controller ).DS.$view.'.php';
            if ( 
file_exists($view_path) ) {
                return 
$view_path;            
            } else {
                return 
VIEWS_PATH.( $controller $controller $this->_controller ).DS.$view.'.php';            
            }        
        } else {
            return 
VIEWS_PATH.( $controller $controller $this->_controller ).DS.$view.'.php';
        }
    }
    
    
/**
     * Get the path of the layout file
     *
     * @author Nesbert Hidalgo
     * @access private
     * @param string $layout
     * @return string
     */
    
private function _get_layout_path($layout null)
    {
        return 
VIEWS_PATH.'layouts'.DS.( $layout $layout $this->layout ).'.php';
    }

    
/**
     * Render views with options
     *
     * @author Nesbert Hidalgo
     * @access public
     * @param array $options
     */
    
public function render($options)
    {
        
// check options
        
if ( !is_array($options) ) return false;
        
        
// set and unset reserved $options
        
if ( $options['partial'] ) {
            
$view '_'.$options['partial'];
            unset(
$options['partial']);
        }
        
        if ( isset(
$options['action']) ) {
            
$view $options['action'];
            unset(
$options['action']);
        }
        
        if ( isset(
$options['render']) ) {
            
$view $options['render'];
            unset(
$options['render']);
        }
        
        if ( 
$options['controller'] ) {
            
$controller $options['controller'];
            unset(
$options['controller']);
        }
        
        if ( isset(
$options['layout']) ) {
            
$layout $options['layout'];
            unset(
$options['layout']);
        }
        
        if ( 
$options['to_str'] ) {
            
$return_as_str true;
            unset(
$options['to_str']);
        }
        
        
// set view path
        
$view_path $this->_get_view_path($view$controller);
        
        switch ( 
true ) {
        
            
// if view equaqls false render nothing
            
case ( $view === false ):
                return;
            break;

            
// if layout get page content with layout
            
case ( $layout ):
                if ( 
$return_as_str ) {
                    return 
view::_get_view($view_path$this->_get_layout_path($layout), $options);                
                } else {
                    return 
view::_show_view($view_path$this->_get_layout_path($layout), $options);
                }
            break;
            
            
// if same layout include files and set variables
            
case ( file_exists($view_path) ):            
                
// create a variable foreach other option, using its key as the variable name
                
if ( count($options) ) foreach ( $options as $key => $values ) $$key $values;
                
// include partial
                
include ( $view_path );                
                return;
            break;
            
            default:
                
//print_obj($options, 1);
                
$_ENV['error']->add("Unable to render 'view'. File not found <strong>{$view_path}</strong>.");
            break;
            
        }
    
    }
    
    
/**
     * Render views with options to a string
     *
     * @author Nesbert Hidalgo
     * @access public
     * @param array $options
     */
    
public function render_to_str($options)
    {
        
$options['to_str'] = true;
        return 
$this->render($options);
    }

    
/**
     * Include a view into the current page
     *
     * @author Nesbert Hidalgo
     * @access public
     * @param mixed $options action to render or an array of render $options
     * @param array $locals optional
     * @param string $controller optional controller name
     */
    
public function build_partial($partial$locals null$controller null)
    {
        if ( 
is_array($partial) ) {
            
$options $partial;
        } else {
            
$options['render'] = $partial;
        }
        if ( 
$locals $options['locals'] = $locals;
        if ( 
$controller $options['controller'] = $controller;
        
$this->render($options);
    }
    
    
/**
     * Alias to build_partial and adds an underscore to the view
     *
     * @author Nesbert Hidalgo
     * @access public 
     * @param mixed $options partial to render or an array of render $options
     * @param array $locals optional
     * @param string $controller optional controller name
     */
    
public function render_partial($partial$locals null$controller null)
    {
        if ( 
is_array($partial) ) {
            
$options $partial;
        } else {
            
$options['partial'] = $partial;
        }
        if ( 
$locals $options['locals'] = $locals;
        if ( 
$controller $options['controller'] = $controller;        
        
$this->render($options);
    }
    
    
/**
     * Allows the ability build a controller within a controller
     *
     * @author John Faircloth, Nesber Hidalgo
     * @access public
     * @param string $controller
     * @param string $action optional
     * @param string $id optional
     * @param string $extras optional
     * @param bool $to_str optional return controller as string
     * @return object controller object
     */
    
public function build_controller($controller$action ''$id ''$extras = array(), $to_str false)
    {
        
$events = array('controller'=>$controller'action'=>$action);
        
$params = array();        
        if ( 
$id $params['id'] = $id;
        return 
creovel::run($eventsarray_merge($params$extras), $to_str);
    }
    
    
/**
     * Alias to build_controller return controller as a string
     *
     * @author Nesber Hidalgo
     * @access public
     * @param string $controller
     * @param string $action optional
     * @param string $id optional
     * @param string $extras optional
     * @return string controller object
     */
    
public function build_controller_to_str($controller$action ''$id ''$extras = array())
    {
        return 
$this->build_controller($controller$action$id$extrastrue);
    }
    
    
/**
     * Magic functions
     *
     * @author Nesbert Hidalgo
     * @access public 
     */
    
public function __call($method$arguments)
    {
        try {
            
            throw new 
Exception("Call to undefined method '{$method}' not found in <strong>".get_class($this)."</strong>.");
        
        } catch ( 
Exception $e ) {
        
            
// add to errors
            
$_ENV['error']->add($e->getMessage(), $e);
        
        }        
    }
    
    
/**
     * Callback functions
     *
     * @author Nesbert Hidalgo
     * @access public 
     */
    
public function before_filter() {}
    public function 
after_filter() {}
    
}
?>