Your IP : 216.73.216.40


Current Path : /var/www/html/ajay/phpwebsite-1.8.x/Global/Http/
Upload File :
Current File : /var/www/html/ajay/phpwebsite-1.8.x/Global/Http/Controller.php

<?php

namespace Http;

/**
 * HttpController Abstract Class.  We highly recommend extending this for each 
 * controller that can be returned by your Module instance.  It makes RESTful 
 * APIs easy and fun!
 *
 * All methods are implemented by default to return 405 Method Not Allowed.  
 * Override only the methods that you require within your software.
 *
 * Additionally, onBeforeExecute() and onAfterExecute() can optionally be 
 * overridden within your module to do things at execute time regardless of HTTP 
 * request method.
 *
 * @package Global
 * @author Jeff Tickle <jtickle at tux dot appstate dot edu>
 * @license http://opensource.org/licenses/lgpl-3.0.html
 */

abstract class Controller implements \Controller
{
    private $module;

    public function __construct(\Module $module)
    {
        $this->module = $module;
    }

    protected function getModule()
    {
        return $this->module;
    }

    public function execute(\Request $request)
    {
        $this->onBeforeExecute($request);

        switch($request->getMethod()) {
        case \Request::GET:
            $response = $this->get($request); break;
        case \Request::POST:
            $response = $this->post($request); break;
        case \Request::PUT:
            $response = $this->put($request); break;
        case \Request::DELETE:
            $response = $this->delete($request); break;
        case \Request::PATCH:
            $response = $this->patch($request); break;
        default:
            $response = new MethodNotAllowedResponse($request); break;
        }

        //@todo If request method is OPTIONS, we need to add an Allow header 
        //based on the user's permissions.
        //@todo something similar for HEAD

        $this->onAfterExecute($request, $response);

        return $response;
    }

    public function onBeforeExecute(\Request &$request)
    {
    }

    public function onAfterExecute(\Request $request, \Response &$response)
    {
    }

    public function get(\Request $request)
    {
        return new MethodNotAllowedResponse($request);
    }

    public function head(\Request $request)
    {
        return new MethodNotAllowedResponse($request);
    }

    public function post(\Request $request)
    {
        return new MethodNotAllowedResponse($request);
    }

    public function put(\Request $request)
    {
        return new MethodNotAllowedResponse($request);
    }

    public function delete(\Request $request)
    {
        return new MethodNotAllowedResponse($request);
    }

    public function options(\Request $request)
    {
        return new MethodNotAllowedResponse($request);
    }

    public function patch(\Request $request)
    {
        return new MethodNotAllowedResponse($request);
    }

    public function getView($data, \Request $request = null)
    {
        if(is_null($request)) {
            $request = Server::getCurrentRequest();
        }

        $iter = $request->getAccept()->getIterator();

        $view = null;
        foreach($iter as $type) {
            if($type->matches('application/json')) {
                $view = $this->getJsonView($data);
                break;
            }
            if($type->matches('application/xml')) {
                $view = $this->getXmlView($data);
                break;
            }
            if($type->matches('text/html')) {
                $view = $this->getHtmlView($data);
                break;
            }
        }

        if(is_null($view))
            throw new NotAcceptableException($request);

        return $view;
    }

    public function getJsonView($data)
    {
        return new \JsonView($data);
    }

    public function getXmlView($data)
    {
        // TODO: Find a nice way to just XML encode anything and provide a 
        // default view here.
        return null;
    }

    public function getHtmlView($data)
    {
        // TODO: Find a nice way to just HTML encode anything and provide a 
        // default view here.
        return null;
    }
}

?>