%PDF- %PDF-
Direktori : /home1/lightco1/public_html/lightingrepublic.com.au/libraries/koowa/view/ |
Current File : //home1/lightco1/public_html/lightingrepublic.com.au/libraries/koowa/view/abstract.php |
<?php /** * @version $Id$ * @package Koowa_View * @copyright Copyright (C) 2007 - 2012 Johan Janssens. All rights reserved. * @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> * @link http://www.nooku.org */ /** * Abstract View Class * * @author Johan Janssens <johan@nooku.org> * @package Koowa_View * @uses KMixinClass * @uses KTemplate */ abstract class KViewAbstract extends KObject { /** * Model identifier (com://APP/COMPONENT.model.NAME) * * @var string|object */ protected $_model; /** * The output of the view * * @var string */ public $output = ''; /** * The mimetype * * @var string */ public $mimetype = ''; /** * Layout name * * @var string */ protected $_layout; /** * Constructor * * @param object An optional KConfig object with configuration options */ public function __construct(KConfig $config = null) { //If no config is passed create it if(!isset($config)) $config = new KConfig(); parent::__construct($config); //Set the output if defined in the config $this->output = $config->output; //Set the mimetype of defined in the config $this->mimetype = $config->mimetype; // set the model $this->setModel($config->model); // set the layout $this->setLayout($config->layout); } /** * Initializes the config for the object * * Called from {@link __construct()} as a first step of object instantiation. * * @param object An optional KConfig object with configuration options * @return void */ protected function _initialize(KConfig $config) { $config->append(array( 'model' => $this->getName(), 'output' => '', 'mimetype' => '', 'layout' => 'default', )); parent::_initialize($config); } /** * Get the name * * @return string The name of the object */ public function getName() { $total = count($this->getIdentifier()->path); return $this->getIdentifier()->path[$total - 1]; } /** * Get the format * * @return string The format of the view */ public function getFormat() { return $this->getIdentifier()->name; } /** * Return the views output * * @return string The output of the view */ public function display() { return $this->output; } /** * Get the model object attached to the contoller * * @return KModelAbstract */ public function getModel() { if(!$this->_model instanceof KModelAbstract) { //Make sure we have a model identifier if(!($this->_model instanceof KServiceIdentifier)) { $this->setModel($this->_model); } $this->_model = $this->getService($this->_model); } return $this->_model; } /** * Method to set a model object attached to the view * * @param mixed An object that implements KObjectServiceable, KServiceIdentifier object * or valid identifier string * @throws KViewException If the identifier is not a table identifier * @return KViewAbstract */ public function setModel($model) { if(!($model instanceof KModelAbstract)) { if(is_string($model) && strpos($model, '.') === false ) { // Model names are always plural if(KInflector::isSingular($model)) { $model = KInflector::pluralize($model); } $identifier = clone $this->getIdentifier(); $identifier->path = array('model'); $identifier->name = $model; } else $identifier = $this->getIdentifier($model); if($identifier->path[0] != 'model') { throw new KControllerException('Identifier: '.$identifier.' is not a model identifier'); } $model = $identifier; } $this->_model = $model; return $this; } /** * Get the layout. * * @return string The layout name */ public function getLayout() { return $this->_layout; } /** * Sets the layout name to use * * @param string The template name. * @return KViewAbstract */ public function setLayout($layout) { $this->_layout = $layout; return $this; } /** * Create a route based on a full or partial query string * * index.php, option, view and layout can be ommitted. The following variations * will all result in the same route * * - foo=bar * - option=com_mycomp&view=myview&foo=bar * - index.php?option=com_mycomp&view=myview&foo=bar * * If the route starts '&' the information will be appended to the current URL. * * In templates, use @route() * * @param string The query string used to create the route * @return string The route */ public function createRoute( $route = '') { $route = trim($route); // Special cases if($route == 'index.php' || $route == 'index.php?') { $result = $route; } else if (substr($route, 0, 1) == '&') { $url = clone KRequest::url(); $vars = array(); parse_str($route, $vars); $url->setQuery(array_merge($url->getQuery(true), $vars)); $result = 'index.php?'.$url->getQuery(); } else { // Strip 'index.php?' if(substr($route, 0, 10) == 'index.php?') { $route = substr($route, 10); } // Parse route $parts = array(); parse_str($route, $parts); $result = array(); // Check to see if there is component information in the route if not add it if(!isset($parts['option'])) { $result[] = 'option=com_'.$this->getIdentifier()->package; } // Add the layout information to the route only if it's not 'default' if(!isset($parts['view'])) { $result[] = 'view='.$this->getName(); } // Add the format information to the URL only if it's not 'html' if(!isset($parts['format']) && $this->getIdentifier()->name != 'html') { $result[] = 'format='.$this->getIdentifier()->name; } // Reconstruct the route if(!empty($route)) { $result[] = $route; } $result = 'index.php?'.implode('&', $result); } return JRoute::_($result); } /** * Returns the views output * * @return string */ public function __toString() { return $this->display(); } }