1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-25 23:10:57 +01:00
phorge-phorge/src/aphront/AphrontController.php
epriestley 6915011067 Provide an AphrontController implementation of willSendResponse()
Summary: This is required by Aphront now but not given a default implementation in the base class.

Test Plan: CORGI sites now work.

Reviewers: chad

Reviewed By: chad

Differential Revision: https://secure.phabricator.com/D14079
2015-09-07 17:18:35 -07:00

107 lines
2.6 KiB
PHP

<?php
abstract class AphrontController extends Phobject {
private $request;
private $currentApplication;
private $delegatingController;
public function setDelegatingController(
AphrontController $delegating_controller) {
$this->delegatingController = $delegating_controller;
return $this;
}
public function getDelegatingController() {
return $this->delegatingController;
}
public function willBeginExecution() {
return;
}
public function willProcessRequest(array $uri_data) {
return;
}
public function handleRequest(AphrontRequest $request) {
if (method_exists($this, 'processRequest')) {
return $this->processRequest();
}
throw new PhutilMethodNotImplementedException(
pht(
'Controllers must implement either %s (recommended) '.
'or %s (deprecated).',
'handleRequest()',
'processRequest()'));
}
public function willSendResponse(AphrontResponse $response) {
return $response;
}
final public function setRequest(AphrontRequest $request) {
$this->request = $request;
return $this;
}
final public function getRequest() {
if (!$this->request) {
throw new PhutilInvalidStateException('setRequest');
}
return $this->request;
}
final public function getViewer() {
return $this->getRequest()->getViewer();
}
final public function delegateToController(AphrontController $controller) {
$request = $this->getRequest();
$controller->setDelegatingController($this);
$controller->setRequest($request);
$application = $this->getCurrentApplication();
if ($application) {
$controller->setCurrentApplication($application);
}
return $controller->handleRequest($request);
}
final public function setCurrentApplication(
PhabricatorApplication $current_application) {
$this->currentApplication = $current_application;
return $this;
}
final public function getCurrentApplication() {
return $this->currentApplication;
}
public function getDefaultResourceSource() {
throw new PhutilMethodNotImplementedException(
pht(
'A Controller must implement %s before you can invoke %s or %s.',
'getDefaultResourceSource()',
'requireResource()',
'initBehavior()'));
}
public function requireResource($symbol) {
$response = CelerityAPI::getStaticResourceResponse();
$response->requireResource($symbol, $this->getDefaultResourceSource());
return $this;
}
public function initBehavior($name, $config = array()) {
Javelin::initBehavior(
$name,
$config,
$this->getDefaultResourceSource());
}
}