%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home1/lightco1/public_html/lightingrepublic.com.au/libraries/koowa/controller/
Upload File :
Create Path :
Current File : //home1/lightco1/public_html/lightingrepublic.com.au/libraries/koowa/controller/service.php

<?php
/**
 * @version		$Id$
 * @package		Koowa_Controller
 * @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 Bread Controller Class
 *
 * @author		Johan Janssens <johan@nooku.org>
 * @package		Koowa_Controller
 */
abstract class KControllerService extends KControllerResource
{
 	/**
     * Initializes the default configuration 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(
    		'behaviors'  => array('discoverable', 'editable'),
    	    'readonly'   => false,
        ));

        parent::_initialize($config);
    }

	/**
	 * Method to set a view object attached to the controller
	 *
	 * @param	mixed	An object that implements KObjectServiceable, KServiceIdentifier object
	 * 					or valid identifier string
	 * @throws	KControllerException	If the identifier is not a view identifier
	 * @return	KControllerAbstract
	 */
    public function setView($view)
	{
	    if(is_string($view) && strpos($view, '.') === false )
		{
		    if(!isset($this->_request->view))
		    {
		        if($this->getModel()->getState()->isUnique()) {
			        $view = KInflector::singularize($view);
		        } else {
			        $view = KInflector::pluralize($view);
	    	    }
		    }
		}

		return parent::setView($view);
	}

	/**
	 * Generic browse action, fetches a list
	 *
	 * @param	KCommandContext	A command context object
	 * @return 	KDatabaseRowset	A rowset object containing the selected rows
	 */
	protected function _actionBrowse(KCommandContext $context)
	{
		$data = $this->getModel()->getList();
		return $data;
	}

	/**
	 * Generic read action, fetches an item
	 *
	 * @param	KCommandContext	A command context object
	 * @return 	KDatabaseRow	A row object containing the selected row
	 */
	protected function _actionRead(KCommandContext $context)
	{
	    $data = $this->getModel()->getItem();
	    $name = ucfirst($this->getView()->getName());

		if($this->getModel()->getState()->isUnique() && $data->isNew()) {
		    $context->setError(new KControllerException($name.' Not Found', KHttpResponse::NOT_FOUND));
		}

		return $data;
	}

	/**
	 * Generic edit action, saves over an existing item
	 *
	 * @param	KCommandContext	A command context object
	 * @return 	KDatabaseRowset A rowset object containing the updated rows
	 */
	protected function _actionEdit(KCommandContext $context)
	{
	    $data = $this->getModel()->getData();

	    if(count($data))
	    {
	        $data->setData(KConfig::unbox($context->data));

	        //Only set the reset content status if the action explicitly succeeded
	        if($data->save() === true) {
		        $context->status = KHttpResponse::RESET_CONTENT;
		    } else {
		        $context->status = KHttpResponse::NO_CONTENT;
		    }
		}
		else $context->setError(new KControllerException('Resource Not Found', KHttpResponse::NOT_FOUND));

		return $data;
	}

	/**
	 * Generic add action, saves a new item
	 *
	 * @param	KCommandContext	A command context object
	 * @return 	KDatabaseRow 	A row object containing the new data
	 */
	protected function _actionAdd(KCommandContext $context)
	{
		$data = $this->getModel()->getItem();

		if($data->isNew())
		{
		    $data->setData(KConfig::unbox($context->data));

		    //Only throw an error if the action explicitly failed.
		    if($data->save() === false)
		    {
			    $error = $data->getStatusMessage();
		        $context->setError(new KControllerException(
		           $error ? $error : 'Add Action Failed', KHttpResponse::INTERNAL_SERVER_ERROR
		        ));

		    }
		    else $context->status = KHttpResponse::CREATED;
		}
		else $context->setError(new KControllerException('Resource Already Exists', KHttpResponse::BAD_REQUEST));

		return $data;
	}

	/**
	 * Generic delete function
	 *
	 * @param	KCommandContext	A command context object
	 * @return 	KDatabaseRowset	A rowset object containing the deleted rows
	 */
	protected function _actionDelete(KCommandContext $context)
	{
	    $data = $this->getModel()->getData();

		if(count($data))
	    {
            $data->setData(KConfig::unbox($context->data));

            //Only throw an error if the action explicitly failed.
	        if($data->delete() === false)
	        {
			    $error = $data->getStatusMessage();
                $context->setError(new KControllerException(
		            $error ? $error : 'Delete Action Failed', KHttpResponse::INTERNAL_SERVER_ERROR
		        ));
		    }
		    else $context->status = KHttpResponse::NO_CONTENT;
		}
		else  $context->setError(new KControllerException('Resource Not Found', KHttpResponse::NOT_FOUND));

		return $data;
	}

	/**
	 * Get action
	 *
	 * This function translates a GET request into a read or browse action. If the view name is
	 * singular a read action will be executed, if plural a browse action will be executed.
	 *
	 * If the result of the read or browse action is not a row or rowset object the fucntion will
	 * passthrough the result, request the attached view to render itself.
	 *
	 * @param	KCommandContext	A command context object
	 * @return 	string|false 	The rendered output of the view or FALSE if something went wrong
	 */
	protected function _actionGet(KCommandContext $context)
	{
		//Check if we are reading or browsing
	    $action = KInflector::isSingular($this->getView()->getName()) ? 'read' : 'browse';

	    //Execute the action
		$result = $this->execute($action, $context);

		//Only process the result if a valid row or rowset object has been returned
		if(($result instanceof KDatabaseRowInterface) || ($result instanceof KDatabaseRowsetInterface)) {
            $result = parent::_actionGet($context);
		}

		return (string) $result;
	}

	/**
	 * Post action
	 *
	 * This function translated a POST request action into an edit or add action. If the model
	 * state is unique a edit action will be executed, if not unique an add action will
	 * be executed.
	 *
	 * @param	KCommandContext		A command context object
	 * @return 	KDatabaseRow(set)	A row(set) object containing the modified data
	 */
	protected function _actionPost(KCommandContext $context)
	{
		$action = $this->getModel()->getState()->isUnique() ? 'edit' : 'add';
		return parent::execute($action, $context);
	}

	/**
	 * Put action
	 *
	 * This function translates a PUT request into an edit or add action. Only if the model
	 * state is unique and the item exists an edit action will be executed, if the resources
	 * doesn't exist and the state is unique an add action will be executed.
	 *
	 * If the resource already exists it will be completely replaced based on the data
	 * available in the request.
	 *
	 * @param	KCommandContext			A command context object
	 * @return 	KDatabaseRow(set)		A row(set) object containing the modified data
	 * @throws  KControllerException 	If the model state is not unique
	 */
	protected function _actionPut(KCommandContext $context)
	{
	    $data = $this->getModel()->getItem();

	    if($this->getModel()->getState()->isUnique())
	    {
            $action = 'add';
	        if(!$data->isNew())
	        {
	            //Reset the row data
	            $data->reset();
	            $action = 'edit';
            }

            //Set the row data based on the unique state information
	        $state = $this->getModel()->getState()->getData(true);
	        $data->setData($state);

            $data = parent::execute($action, $context);
	    }
	    else $context->setError(new KControllerException(ucfirst('Resource not found', KHttpResponse::BAD_REQUEST)));

	    return $data;
	}
}

Zerion Mini Shell 1.0