diff --git a/control/ContentNegotiator.php b/control/ContentNegotiator.php
index c34e47171..ecbe01492 100644
--- a/control/ContentNegotiator.php
+++ b/control/ContentNegotiator.php
@@ -1,62 +1,72 @@
getHeader("Content-Type");
- // Disable content negotation for other content types
+ // Disable content negotiation for other content types
if($contentType && substr($contentType, 0,9) != 'text/html'
&& substr($contentType, 0,21) != 'application/xhtml+xml') {
return false;
@@ -111,6 +123,9 @@ class ContentNegotiator extends Object {
else return (substr($response->getBody(),0,5) == '<' . '?xml');
}
+ /**
+ * @param SS_HTTPResponse $response
+ */
public static function process(SS_HTTPResponse $response) {
if(!self::enabled_for($response)) return;
@@ -126,8 +141,8 @@ class ContentNegotiator extends Object {
$chosenFormat = $_GET['forceFormat'];
} else {
- // The W3C validator doesn't send an HTTP_ACCEPT header, but it can support xhtml. We put this special
- // case in here so that designers don't get worried that their templates are HTML4.
+ // The W3C validator doesn't send an HTTP_ACCEPT header, but it can support xhtml. We put this
+ // special case in here so that designers don't get worried that their templates are HTML4.
if(isset($_SERVER['HTTP_USER_AGENT']) && substr($_SERVER['HTTP_USER_AGENT'], 0, 14) == 'W3C_Validator/') {
$chosenFormat = "xhtml";
@@ -159,8 +174,8 @@ class ContentNegotiator extends Object {
* Replaces a few common tags and entities with their XHTML representations (
, ,
* , checked, selected).
*
- * @param $response SS_HTTPResponse
- * @return string
+ * @param SS_HTTPResponse $response
+ *
* @todo Search for more xhtml replacement
*/
public function xhtml(SS_HTTPResponse $response) {
@@ -191,12 +206,15 @@ class ContentNegotiator extends Object {
$response->setBody($content);
}
- /*
- * Check user defined content type and use it, if it's empty use the text/html.
- * If find a XML header replaces it and existing doctypes with HTML4.01 Strict.
- * Replaces self-closing tags like with unclosed solitary tags like .
- * Replaces all occurrences of "application/xhtml+xml" with "text/html" in the template.
- * Removes "xmlns" attributes and any Pragmas.
+ /**
+ * Performs the following replacements:
+ * - Check user defined content type and use it, if it's empty use the text/html.
+ * - If find a XML header replaces it and existing doctypes with HTML4.01 Strict.
+ * - Replaces self-closing tags like with unclosed solitary tags like .
+ * - Replaces all occurrences of "application/xhtml+xml" with "text/html" in the template.
+ * - Removes "xmlns" attributes and any Pragmas.
+ *
+ * @param SS_HTTPResponse $response
*/
public function html(SS_HTTPResponse $response) {
$encoding = Config::inst()->get('ContentNegotiator', 'encoding');
diff --git a/control/Controller.php b/control/Controller.php
index 26bdff851..bafba0828 100644
--- a/control/Controller.php
+++ b/control/Controller.php
@@ -1,63 +1,81 @@
requestVars()
+ * Contains all GET and POST parameters passed to the current {@link SS_HTTPRequest}.
+ *
+ * @var array
*/
protected $requestParams;
/**
- * @var string $action The URL part matched on the current controller as
- * determined by the "$Action" part of the {@link $url_handlers} definition.
- * Should correlate to a public method on this controller.
- * Used in {@link render()} and {@link getViewer()} to determine
- * action-specific templates.
+ * The URL part matched on the current controller as determined by the "$Action" part of the
+ * {@link $url_handlers} definition. Should correlate to a public method on this controller.
+ *
+ * Used in {@link render()} and {@link getViewer()} to determine action-specific templates.
+ *
+ * @var string
*/
protected $action;
/**
- * The {@link Session} object for this controller
+ * The {@link Session} object for this controller.
+ *
+ * @var Session
*/
protected $session;
/**
- * Stack of current controllers.
- * Controller::$controller_stack[0] is the current controller.
+ * Stack of current controllers. Controller::$controller_stack[0] is the current controller.
+ *
+ * @var array
*/
protected static $controller_stack = array();
+ /**
+ * @var bool
+ */
protected $basicAuthEnabled = true;
/**
- * @var SS_HTTPResponse $response The response object that the controller returns.
+ * The response object that the controller returns.
+ *
* Set in {@link handleRequest()}.
+ *
+ * @var SS_HTTPResponse
*/
protected $response;
/**
- * Default URL handlers - (Action)/(ID)/(OtherID)
+ * Default URL handlers.
+ *
+ * @var array
*/
private static $url_handlers = array(
'$Action//$ID/$OtherID' => 'handleAction',
);
+ /**
+ * @var array
+ */
private static $allowed_actions = array(
'handleAction',
'handleIndex',
@@ -76,7 +94,9 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
}
/**
- * Returns a link to this controller. Overload with your own Link rules if they exist.
+ * Returns a link to this controller. Overload with your own Link rules if they exist.
+ *
+ * @return string
*/
public function Link() {
return get_class($this) .'/';
@@ -86,32 +106,29 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
* Executes this controller, and return an {@link SS_HTTPResponse} object with the result.
*
* This method first does a few set-up activities:
- * - Push this controller ont to the controller stack -
- * see {@link Controller::curr()} for information about this.
- * - Call {@link init()}
- * - Defer to {@link RequestHandler->handleRequest()} to determine which action
- * should be executed
+ * - Push this controller ont to the controller stack - see {@link Controller::curr()} for
+ * information about this.
+ * - Call {@link init()}
+ * - Defer to {@link RequestHandler->handleRequest()} to determine which action should be executed.
+ *
+ * Note: $requestParams['executeForm'] support was removed, make the following change in your URLs:
+ * "/?executeForm=FooBar" -> "/FooBar".
*
- * Note: $requestParams['executeForm'] support was removed,
- * make the following change in your URLs:
- * "/?executeForm=FooBar" -> "/FooBar"
* Also make sure "FooBar" is in the $allowed_actions of your controller class.
*
- * Note: You should rarely need to overload run() -
- * this kind of change is only really appropriate for things like nested
- * controllers - {@link ModelAsController} and {@link RootURLController}
- * are two examples here. If you want to make more
- * orthodox functionality, it's better to overload {@link init()} or {@link index()}.
+ * Note: You should rarely need to overload run() - this kind of change is only really appropriate
+ * for things like nested controllers - {@link ModelAsController} and {@link RootURLController}
+ * are two examples here. If you want to make more orthodox functionality, it's better to overload
+ * {@link init()} or {@link index()}.
*
- * Important: If you are going to overload handleRequest,
- * make sure that you start the method with $this->pushCurrent()
- * and end the method with $this->popCurrent().
- * Failure to do this will create weird session errors.
+ * Important: If you are going to overload handleRequest, make sure that you start the method with
+ * $this->pushCurrent() and end the method with $this->popCurrent(). Failure to do this will create
+ * weird session errors.
*
- * @param $request The {@link SS_HTTPRequest} object that is responsible
- * for distributing request parsing.
- * @return SS_HTTPResponse The response that this controller produces,
- * including HTTP headers such as redirection info
+ * @param SS_HTTPRequest $request
+ * @param DataModel $model
+ *
+ * @return SS_HTTPResponse
*/
public function handleRequest(SS_HTTPRequest $request, DataModel $model) {
if(!$request) user_error("Controller::handleRequest() not passed a request!", E_USER_ERROR);
@@ -171,8 +188,13 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
}
/**
- * Controller's default action handler. It will call the method named in $Action, if that method exists.
- * If $Action isn't given, it will use "index" as a default.
+ * Controller's default action handler. It will call the method named in "$Action", if that method
+ * exists. If "$Action" isn't given, it will use "index" as a default.
+ *
+ * @param SS_HTTPRequest $request
+ * @param string $action
+ *
+ * @return HTMLText|SS_HTTPResponse
*/
protected function handleAction($request, $action) {
$this->extend('beforeCallActionHandler', $request, $action);
@@ -198,20 +220,27 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
}
}
+ /**
+ * @param array $urlParams
+ */
public function setURLParams($urlParams) {
$this->urlParams = $urlParams;
}
/**
- * @return array The parameters extracted from the URL by the {@link Director}.
+ * Returns the parameters extracted from the URL by the {@link Director}.
+ *
+ * @return array
*/
public function getURLParams() {
return $this->urlParams;
}
/**
- * Returns the SS_HTTPResponse object that this controller is building up.
- * Can be used to set the status code and headers
+ * Returns the SS_HTTPResponse object that this controller is building up. Can be used to set the
+ * status code and headers.
+ *
+ * @return SS_HTTPResponse
*/
public function getResponse() {
if (!$this->response) {
@@ -224,21 +253,27 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
* Sets the SS_HTTPResponse object that this controller is building up.
*
* @param SS_HTTPResponse $response
- * @return Controller
+ *
+ * @return $this
*/
public function setResponse(SS_HTTPResponse $response) {
$this->response = $response;
return $this;
}
+ /**
+ * @var bool
+ */
protected $baseInitCalled = false;
/**
* Return the object that is going to own a form that's being processed, and handle its execution.
- * Note that the result needn't be an actual controller object.
+ * Note that the result need not be an actual controller object.
+ *
+ * @return mixed
*/
public function getFormOwner() {
- // Get the appropraite ocntroller: sometimes we want to get a form from another controller
+ // Get the appropriate controller: sometimes we want to get a form from another controller
if(isset($this->requestParams['formController'])) {
$formController = Director::getControllerForURL($this->requestParams['formController']);
@@ -253,8 +288,12 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
}
/**
- * This is the default action handler used if a method doesn't exist.
- * It will process the controller object with the template returned by {@link getViewer()}
+ * This is the default action handler used if a method doesn't exist. It will process the
+ * controller object with the template returned by {@link getViewer()}.
+ *
+ * @param string $action
+ *
+ * @return HTMLText
*/
public function defaultAction($action) {
return $this->getViewer($action)->process($this);
@@ -262,14 +301,19 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
/**
* Returns the action that is being executed on this controller.
+ *
+ * @return string
*/
public function getAction() {
return $this->action;
}
/**
- * Return an SSViewer object to process the data
- * @return SSViewer The viewer identified being the default handler for this Controller/Action combination
+ * Return the viewer identified being the default handler for this Controller/Action combination.
+ *
+ * @param string $action
+ *
+ * @return SSViewer
*/
public function getViewer($action) {
// Hard-coded templates
@@ -308,14 +352,22 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
return new SSViewer($templates);
}
+ /**
+ * @param string $action
+ *
+ * @return bool
+ */
public function hasAction($action) {
return parent::hasAction($action) || $this->hasActionTemplate($action);
}
/**
- * Removes all the "action" part of the current URL and returns the result.
- * If no action parameter is present, returns the full URL
- * @static
+ * Removes all the "action" part of the current URL and returns the result. If no action parameter
+ * is present, returns the full URL.
+ *
+ * @param string $fullURL
+ * @param null|string $action
+ *
* @return string
*/
public function removeAction($fullURL, $action = null) {
@@ -331,7 +383,11 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
/**
* Return the class that defines the given action, so that we know where to check allowed_actions.
- * Overrides RequestHandler to also look at defined templates
+ * Overrides RequestHandler to also look at defined templates.
+ *
+ * @param string $action
+ *
+ * @return string
*/
protected function definingClassForAction($action) {
$definingClass = parent::definingClassForAction($action);
@@ -347,9 +403,11 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
}
/**
- * Returns TRUE if this controller has a template that is specifically designed to handle a specific action.
+ * Returns TRUE if this controller has a template that is specifically designed to handle a
+ * specific action.
*
* @param string $action
+ *
* @return bool
*/
public function hasActionTemplate($action) {
@@ -367,11 +425,11 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
}
/**
- * Render the current controller with the templates determined
- * by {@link getViewer()}.
+ * Render the current controller with the templates determined by {@link getViewer()}.
*
- * @param array $params Key-value array for custom template variables (Optional)
- * @return string Parsed template content
+ * @param array $params
+ *
+ * @return string
*/
public function render($params = null) {
$template = $this->getViewer($this->getAction());
@@ -385,16 +443,17 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
}
/**
- * Call this to disable site-wide basic authentication for a specific contoller.
- * This must be called before Controller::init(). That is, you must call it in your controller's
- * init method before it calls parent::init().
+ * Call this to disable site-wide basic authentication for a specific controller. This must be
+ * called before Controller::init(). That is, you must call it in your controller's init method
+ * before it calls parent::init().
*/
public function disableBasicAuth() {
$this->basicAuthEnabled = false;
}
/**
- * Returns the current controller
+ * Returns the current controller.
+ *
* @return Controller
*/
public static function curr() {
@@ -406,19 +465,23 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
}
/**
- * Tests whether we have a currently active controller or not
- * @return boolean True if there is at least 1 controller in the stack.
+ * Tests whether we have a currently active controller or not. True if there is at least 1
+ * controller in the stack.
+ *
+ * @return bool
*/
public static function has_curr() {
return Controller::$controller_stack ? true : false;
}
/**
- * Returns true if the member is allowed to do the given action.
- * @param perm The permission to be checked, such as 'View'.
- * @param member The member whose permissions need checking. Defaults to the currently logged
+ * Returns true if the member is allowed to do the given action. Defaults to the currently logged
* in user.
- * @return boolean
+ *
+ * @param string $perm
+ * @param null|member $member
+ *
+ * @return bool
*/
public function can($perm, $member = null) {
if(!$member) $member = Member::currentUser();
@@ -433,12 +496,10 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
}
}
- //---------------------------------------------------------------------------------------------------------------
-
/**
- * Pushes this controller onto the stack of current controllers.
- * This means that any redirection, session setting, or other things that rely on Controller::curr() will now
- * write to this controller object.
+ * Pushes this controller onto the stack of current controllers. This means that any redirection,
+ * session setting, or other things that rely on Controller::curr() will now write to this
+ * controller object.
*/
public function pushCurrent() {
array_unshift(self::$controller_stack, $this);
@@ -467,6 +528,9 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
/**
* Redirect to the given URL.
*
+ * @param string $url
+ * @param int $code
+ *
* @return SS_HTTPResponse
*/
public function redirect($url, $code=302) {
@@ -486,12 +550,14 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
}
/**
- * Redirect back. Uses either the HTTP_REFERER or a manually set request-variable called "BackURL".
- * This variable is needed in scenarios where not HTTP-Referer is sent (
- * e.g when calling a page by location.href in IE).
- * If none of the two variables is available, it will redirect to the base
+ * Redirect back. Uses either the HTTP-Referer or a manually set request-variable called "BackURL".
+ * This variable is needed in scenarios where HTTP-Referer is not sent (e.g when calling a page by
+ * location.href in IE). If none of the two variables is available, it will redirect to the base
* URL (see {@link Director::baseURL()}).
+ *
* @uses redirect()
+ *
+ * @return bool|SS_HTTPResponse
*/
public function redirectBack() {
// Don't cache the redirect back ever
@@ -525,16 +591,18 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
}
/**
- * Tests whether a redirection has been requested.
- * @return string If redirect() has been called, it will return the URL redirected to. Otherwise, it will
- * return null;
+ * Tests whether a redirection has been requested. If redirect() has been called, it will return
+ * the URL redirected to. Otherwise, it will return null.
+ *
+ * @return null|string
*/
public function redirectedTo() {
return $this->getResponse() && $this->getResponse()->getHeader('Location');
}
/**
- * Get the Session object representing this Controller's session
+ * Get the Session object representing this Controller's session.
+ *
* @return Session
*/
public function getSession() {
@@ -543,20 +611,22 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
/**
* Set the Session object.
+ *
+ * @param Session $session
*/
public function setSession(Session $session) {
$this->session = $session;
}
/**
- * Joins two or more link segments together, putting a slash between them if necessary.
- * Use this for building the results of {@link Link()} methods.
- * If either of the links have query strings,
+ * Joins two or more link segments together, putting a slash between them if necessary. Use this
+ * for building the results of {@link Link()} methods. If either of the links have query strings,
* then they will be combined and put at the end of the resulting url.
*
* Caution: All parameters are expected to be URI-encoded already.
*
* @param string
+ *
* @return string
*/
public static function join_links() {
@@ -590,6 +660,9 @@ class Controller extends RequestHandler implements TemplateGlobalProvider {
return $result;
}
+ /**
+ * @return array
+ */
public static function get_template_global_variables() {
return array(
'CurrentPage' => 'curr',
diff --git a/control/Cookie.php b/control/Cookie.php
index 76de0e3e0..e03907ca0 100644
--- a/control/Cookie.php
+++ b/control/Cookie.php
@@ -3,35 +3,41 @@
* A set of static methods for manipulating cookies.
*
* @package framework
+ *
* @subpackage misc
*/
class Cookie {
/**
* @config
- * @var boolean
+ *
+ * @var bool
*/
private static $report_errors = true;
/**
- * Fetch the current instance of the cookie backend
+ * Fetch the current instance of the cookie backend.
*
- * @return Cookie_Backend The cookie backend
+ * @return Cookie_Backend
*/
public static function get_inst() {
return Injector::inst()->get('Cookie_Backend');
}
/**
- * Set a cookie variable
+ * Set a cookie variable.
*
- * @param string $name The variable name
- * @param mixed $value The variable value.
- * @param int $expiry The expiry time, in days. Defaults to 90.
- * @param string $path See http://php.net/set_session
- * @param string $domain See http://php.net/set_session
- * @param boolean $secure See http://php.net/set_session
- * @param boolean $httpOnly See http://php.net/set_session
+ * Expiry time is set in days, and defaults to 90.
+ *
+ * @param string $name
+ * @param mixed $value
+ * @param int $expiry
+ * @param string $path
+ * @param string $domain
+ * @param bool $secure
+ * @param bool $httpOnly
+ *
+ * See http://php.net/set_session
*/
public static function set($name, $value, $expiry = 90, $path = null, $domain = null, $secure = false,
$httpOnly = true
@@ -40,31 +46,34 @@ class Cookie {
}
/**
- * Get the cookie value by name
+ * Get the cookie value by name. Returns null if not set.
*
- * @param string $name The name of the cookie to get
- * @param boolean $includeUnsent Include cookies we've yet to send when fetching values
+ * @param string $name
+ * @param bool $includeUnsent
*
- * @return string|null The cookie value or null if unset
+ * @return null|string
*/
public static function get($name, $includeUnsent = true) {
return self::get_inst()->get($name, $includeUnsent);
}
/**
- * Get all the cookies
+ * Get all the cookies.
*
- * @param boolean $includeUnsent Include cookies we've yet to send
- * @return array All the cookies
+ * @param bool $includeUnsent
+ *
+ * @return array
*/
public static function get_all($includeUnsent = true) {
return self::get_inst()->getAll($includeUnsent);
}
/**
- * @param string
- * @param string
- * @param string
+ * @param string $name
+ * @param null|string $path
+ * @param null|string $domain
+ * @param bool $secure
+ * @param bool $httpOnly
*/
public static function force_expiry($name, $path = null, $domain = null, $secure = false, $httpOnly = true) {
return self::get_inst()->forceExpiry($name, $path, $domain, $secure, $httpOnly);
diff --git a/control/Director.php b/control/Director.php
index cae4b74f5..f50e423cf 100644
--- a/control/Director.php
+++ b/control/Director.php
@@ -2,14 +2,16 @@
/**
* Director is responsible for processing URLs, and providing environment information.
*
- * The most important part of director is {@link Director::direct()}, which is passed a URL and will execute the
- * appropriate controller.
+ * The most important part of director is {@link Director::direct()}, which is passed a URL and will
+ * execute the appropriate controller.
*
* Director also has a number of static methods that provide information about the environment, such as
* {@link Director::$environment_type}.
*
* @package framework
+ *
* @subpackage control
+ *
* @see Director::direct()
* @see Director::$rules
* @see Director::$environment_type
@@ -17,22 +19,34 @@
class Director implements TemplateGlobalProvider {
/**
- * Specifies this url is relative to the base
+ * Specifies this url is relative to the base.
+ *
+ * @var string
*/
const BASE = 'BASE';
/**
- * Specifies this url is relative to the site root
+ * Specifies this url is relative to the site root.
+ *
+ * @var string
*/
const ROOT = 'ROOT';
/**
- * specifies this url is relative to the current request
+ * specifies this url is relative to the current request.
+ *
+ * @var string
*/
const REQUEST = 'REQUEST';
+ /**
+ * @var array
+ */
static private $urlParams;
+ /**
+ * @var array
+ */
static private $rules = array();
/**
@@ -42,52 +56,61 @@ class Director implements TemplateGlobalProvider {
/**
* @config
+ *
* @var string
*/
private static $alternate_base_folder;
/**
* @config
+ *
* @var array
*/
private static $dev_servers = array();
/**
* @config
+ *
* @var array
*/
private static $test_servers = array();
/**
- * Setting this explicitly specifies the protocol (http or https) used, overriding
- * the normal behaviour of Director::is_https introspecting it from the request
+ * Setting this explicitly specifies the protocol ("http" or "https") used, overriding the normal
+ * behaviour of Director::is_https introspecting it from the request. False values imply default
+ * introspection.
*
* @config
- * @var string - "http" or "https" to force the protocol, or false-ish to use default introspection from request
+ *
+ * @var string
*/
private static $alternate_protocol;
/**
* @config
+ *
* @var string
*/
private static $alternate_base_url;
/**
* @config
+ *
* @var string
*/
private static $environment_type;
/**
- * Add URL matching rules to the Director.
+ * Add URL matching rules to the Director. The director is responsible for turning URLs into
+ * Controller objects.
*
- * The director is responsible for turning URLs into Controller objects.
+ * Higher $priority values will get your rule checked first. We recommend priority 100 for your
+ * site's rules. The built-in rules are priority 10, standard modules are priority 50.
*
* @deprecated 4.0 Use the "Director.rules" config setting instead
- * @param $priority The priority of the rules; higher values will get your rule checked first. We recommend
- * priority 100 for your site's rules. The built-in rules are priority 10, standard modules are
- * priority 50.
+ *
+ * @param int $priority
+ * @param array $rules
*/
public static function addRules($priority, $rules) {
Deprecation::notice('4.0', 'Use the "Director.rules" config setting instead');
@@ -99,20 +122,25 @@ class Director implements TemplateGlobalProvider {
* Process the given URL, creating the appropriate controller and executing it.
*
* Request processing is handled as follows:
- * - Director::direct() creates a new SS_HTTPResponse object and passes this to Director::handleRequest().
- * - Director::handleRequest($request) checks each of the Director rules and identifies a controller to handle
- * this request.
- * - Controller::handleRequest($request) is then called. This will find a rule to handle the URL, and call the
- * rule handling method.
- * - RequestHandler::handleRequest($request) is recursively called whenever a rule handling method returns a
- * RequestHandler object.
+ * - Director::direct() creates a new SS_HTTPResponse object and passes this to
+ * Director::handleRequest().
+ * - Director::handleRequest($request) checks each of the Director rules and identifies a controller
+ * to handle this request.
+ * - Controller::handleRequest($request) is then called. This will find a rule to handle the URL,
+ * and call the rule handling method.
+ * - RequestHandler::handleRequest($request) is recursively called whenever a rule handling method
+ * returns a RequestHandler object.
*
- * In addition to request processing, Director will manage the session, and perform the output of the actual
- * response to the browser.
+ * In addition to request processing, Director will manage the session, and perform the output of
+ * the actual response to the browser.
*
- * @param $url String, the URL the user is visiting, without the querystring.
* @uses handleRequest() rule-lookup logic is handled by this.
* @uses Controller::run() Controller::run() handles the page logic for a Director::direct() call.
+ *
+ * @param string $url
+ * @param DataModel $model
+ *
+ * @throws SS_HTTPResponse_Exception
*/
public static function direct($url, DataModel $model) {
// Validate $_FILES array before merging it with $_POST
@@ -209,25 +237,28 @@ class Director implements TemplateGlobalProvider {
}
/**
- * Test a URL request, returning a response object.
- *
- * This method is the counterpart of Director::direct() that is used in functional testing. It will execute the
- * URL given, and return the result as an SS_HTTPResponse object.
- *
- * @param string $url The URL to visit
- * @param array $postVars The $_POST & $_FILES variables
- * @param Session $session The {@link Session} object representing the current session. By passing the same
- * object to multiple calls of Director::test(), you can simulate a persisted session.
- * @param string $httpMethod The HTTP method, such as GET or POST. It will default to POST if postVars is set,
- * GET otherwise. Overwritten by $postVars['_method'] if present.
- * @param string $body The HTTP body
- * @param array $headers HTTP headers with key-value pairs
- * @param array|Cookie_Backend $cookies to populate $_COOKIE
- * @param HTTP_Request $request The {@see HTTP_Request} object generated as a part of this request
- * @return SS_HTTPResponse
+ * Test a URL request, returning a response object. This method is the counterpart of
+ * Director::direct() that is used in functional testing. It will execute the URL given, and
+ * return the result as an SS_HTTPResponse object.
*
* @uses getControllerForURL() The rule-lookup logic is handled by this.
- * @uses Controller::run() Controller::run() handles the page logic for a Director::direct() call.
+ * @uses Controller::run() Handles the page logic for a Director::direct() call.
+ *
+ * @param string $url The URL to visit.
+ * @param array $postVars The $_POST & $_FILES variables.
+ * @param array|Session $session The {@link Session} object representing the current session.
+ * By passing the same object to multiple calls of Director::test(), you can simulate a persisted
+ * session.
+ * @param string $httpMethod The HTTP method, such as GET or POST. It will default to POST if
+ * postVars is set, GET otherwise. Overwritten by $postVars['_method'] if present.
+ * @param string $body The HTTP body.
+ * @param array $headers HTTP headers with key-value pairs.
+ * @param array|Cookie_Backend $cookies to populate $_COOKIE.
+ * @param HTTP_Request $request The {@see HTTP_Request} object generated as a part of this request.
+ *
+ * @return SS_HTTPResponse
+ *
+ * @throws SS_HTTPResponse_Exception
*/
public static function test($url, $postVars = null, $session = array(), $httpMethod = null, $body = null,
$headers = array(), $cookies = array(), &$request = null) {
@@ -235,8 +266,8 @@ class Director implements TemplateGlobalProvider {
Config::nest();
Injector::nest();
- // These are needed so that calling Director::test() doesnt muck with whoever is calling it.
- // Really, it's some inappropriate coupling and should be resolved by making less use of statics
+ // These are needed so that calling Director::test() does not muck with whoever is calling it.
+ // Really, it's some inappropriate coupling and should be resolved by making less use of statics.
$oldStage = Versioned::current_stage();
$getVars = array();
@@ -265,7 +296,7 @@ class Director implements TemplateGlobalProvider {
$existingRequestVars, $existingGetVars, $existingPostVars, $existingSessionVars,
$existingCookies, $existingServer, $existingRequirementsBackend, $oldStage
) {
- // Restore the superglobals
+ // Restore the super globals
$_REQUEST = $existingRequestVars;
$_GET = $existingGetVars;
$_POST = $existingPostVars;
@@ -275,7 +306,7 @@ class Director implements TemplateGlobalProvider {
Requirements::set_backend($existingRequirementsBackend);
- // These are needed so that calling Director::test() doesnt muck with whoever is calling it.
+ // These are needed so that calling Director::test() does not muck with whoever is calling it.
// Really, it's some inappropriate coupling and should be resolved by making less use of statics
Versioned::reading_stage($oldStage);
@@ -290,8 +321,7 @@ class Director implements TemplateGlobalProvider {
// Handle absolute URLs
if (parse_url($url, PHP_URL_HOST)) {
$bits = parse_url($url);
- // If a port is mentioned in the absolute URL, be sure to add that into the
- // HTTP host
+ // If a port is mentioned in the absolute URL, be sure to add that into the HTTP host
if(isset($bits['port'])) {
$_SERVER['HTTP_HOST'] = $bits['host'].':'.$bits['port'];
} else {
@@ -309,7 +339,7 @@ class Director implements TemplateGlobalProvider {
parse_str($getVarsEncoded, $getVars);
}
- // Replace the superglobals with appropriate test values
+ // Replace the super globals with appropriate test values
$_REQUEST = ArrayLib::array_merge_recursive((array) $getVars, (array) $postVars);
$_GET = (array) $getVars;
$_POST = (array) $postVars;
@@ -358,6 +388,10 @@ class Director implements TemplateGlobalProvider {
/**
* Handle an HTTP request, defined with a SS_HTTPRequest object.
*
+ * @param SS_HTTPRequest $request
+ * @param Session $session
+ * @param DataModel $model
+ *
* @return SS_HTTPResponse|string
*/
protected static function handleRequest(SS_HTTPRequest $request, Session $session, DataModel $model) {
@@ -382,12 +416,12 @@ class Director implements TemplateGlobalProvider {
// Find the controller name
if(isset($arguments['Controller'])) $controller = $arguments['Controller'];
- // Pop additional tokens from the tokeniser if necessary
+ // Pop additional tokens from the tokenizer if necessary
if(isset($controllerOptions['_PopTokeniser'])) {
$request->shift($controllerOptions['_PopTokeniser']);
}
- // Handle redirections
+ // Handle redirection
if(isset($arguments['Redirect'])) {
return "redirect:" . Director::absoluteURL($arguments['Redirect'], true);
@@ -416,15 +450,15 @@ class Director implements TemplateGlobalProvider {
/**
* Set url parameters (should only be called internally by RequestHandler->handleRequest()).
*
- * @param $params array
+ * @param array $params
*/
public static function setUrlParams($params) {
Director::$urlParams = $params;
}
/**
- * Return the {@link SiteTree} object that is currently being viewed. If there is no SiteTree object to return,
- * then this will return the current controller.
+ * Return the {@link SiteTree} object that is currently being viewed. If there is no SiteTree
+ * object to return, then this will return the current controller.
*
* @return SiteTree
*/
@@ -442,15 +476,16 @@ class Director implements TemplateGlobalProvider {
}
/**
- * Turns the given URL into an absolute URL.
- * By default non-site root relative urls will be evaluated relative to the current base_url
+ * Turns the given URL into an absolute URL. By default non-site root relative urls will be
+ * evaluated relative to the current base_url.
*
- * @param string $url URL To transform to absolute
+ * @param string $url URL To transform to absolute.
* @param string $relativeParent Method to use for evaluating relative urls.
* Either one of BASE (baseurl), ROOT (site root), or REQUEST (requested page).
* Defaults to BASE, which is the same behaviour as template url resolution.
- * Igored if the url is absolute or site root.
- * @return string The fully qualified URL
+ * Ignored if the url is absolute or site root.
+ *
+ * @return string
*/
public static function absoluteURL($url, $relativeParent = self::BASE) {
if(is_bool($relativeParent)) {
@@ -496,10 +531,10 @@ class Director implements TemplateGlobalProvider {
}
/**
- * Returns the part of the URL, 'http://www.mysite.com'.
+ * Returns the domain part of the URL 'http://www.mysite.com'. Returns FALSE is this environment
+ * variable isn't set.
*
- * @return boolean|string The domain from the PHP environment. Returns FALSE is this environment variable isn't
- * set.
+ * @return bool|string
*/
public static function protocolAndHost() {
$alternate = Config::inst()->get('Director', 'alternate_base_url');
@@ -538,7 +573,7 @@ class Director implements TemplateGlobalProvider {
/**
* Return whether the site is running as under HTTPS.
*
- * @return boolean
+ * @return bool
*/
public static function is_https() {
$return = false;
@@ -577,10 +612,8 @@ class Director implements TemplateGlobalProvider {
}
/**
- * Returns the root URL for the site.
- *
- * It will be automatically calculated unless it is overridden with
- * {@link setBaseURL()}.
+ * Returns the root URL for the site. It will be automatically calculated unless it is overridden
+ * with {@link setBaseURL()}.
*
* @return string
*/
@@ -607,10 +640,12 @@ class Director implements TemplateGlobalProvider {
}
/**
- * Sets the root URL for the website.
- * If the site isn't accessible from the URL you provide, weird things will happen.
+ * Sets the root URL for the website. If the site isn't accessible from the URL you provide,
+ * weird things will happen.
*
- * @deprecated 4.0 Use the "Director.alternate_base_url" config setting instead
+ * @deprecated 4.0 Use the "Director.alternate_base_url" config setting instead.
+ *
+ * @param string $baseURL
*/
public static function setBaseURL($baseURL) {
Deprecation::notice('4.0', 'Use the "Director.alternate_base_url" config setting instead');
@@ -618,8 +653,10 @@ class Director implements TemplateGlobalProvider {
}
/**
- * Returns the root filesystem folder for the site.
- * It will be automatically calculated unless it is overridden with {@link setBaseFolder()}.
+ * Returns the root filesystem folder for the site. It will be automatically calculated unless
+ * it is overridden with {@link setBaseFolder()}.
+ *
+ * @return string
*/
public static function baseFolder() {
$alternate = Config::inst()->get('Director', 'alternate_base_folder');
@@ -627,10 +664,12 @@ class Director implements TemplateGlobalProvider {
}
/**
- * Sets the root folder for the website.
- * If the site isn't accessible from the folder you provide, weird things will happen.
+ * Sets the root folder for the website. If the site isn't accessible from the folder you provide,
+ * weird things will happen.
*
- * @deprecated 4.0 Use the "Director.alternate_base_folder" config setting instead
+ * @deprecated 4.0 Use the "Director.alternate_base_folder" config setting instead.
+ *
+ * @param string $baseFolder
*/
public static function setBaseFolder($baseFolder) {
Deprecation::notice('4.0', 'Use the "Director.alternate_base_folder" config setting instead');
@@ -638,13 +677,12 @@ class Director implements TemplateGlobalProvider {
}
/**
- * Turns an absolute URL or folder into one that's relative to the root of
- * the site. This is useful when turning a URL into a filesystem reference,
- * or vice versa.
+ * Turns an absolute URL or folder into one that's relative to the root of the site. This is useful
+ * when turning a URL into a filesystem reference, or vice versa.
*
- * @param string $url Accepts both a URL or a filesystem path
- * @return string Either a relative URL if the checks succeeded, or the
- * original (possibly absolute) URL.
+ * @param string $url Accepts both a URL or a filesystem path.
+ *
+ * @return string
*/
public static function makeRelative($url) {
// Allow for the accidental inclusion whitespace and // in the URL
@@ -695,10 +733,10 @@ class Director implements TemplateGlobalProvider {
}
/**
- * Returns true if a given path is absolute. Works under both *nix and windows
- * systems
+ * Returns true if a given path is absolute. Works under both *nix and windows systems.
*
* @param string $path
+ *
* @return bool
*/
public static function is_absolute($path) {
@@ -708,30 +746,30 @@ class Director implements TemplateGlobalProvider {
}
/**
- * Determine if the url is root relative (i.e. starts with /, but not with //)
- * SilverStripe considers root relative urls as a subset of relative urls
+ * Determine if the url is root relative (i.e. starts with /, but not with //) SilverStripe
+ * considers root relative urls as a subset of relative urls.
*
* @param string $url
- * @return bool True if this url is root relative
+ *
+ * @return bool
*/
public static function is_root_relative_url($url) {
return strpos($url, '/') === 0 && strpos($url, '//') !== 0;
}
/**
- * Checks if a given URL is absolute (e.g. starts with 'http://' etc.).
- * URLs beginning with "//" are treated as absolute, as browsers take this to mean
- * the same protocol as currently being used.
+ * Checks if a given URL is absolute (e.g. starts with 'http://' etc.). URLs beginning with "//"
+ * are treated as absolute, as browsers take this to mean the same protocol as currently being used.
*
- * Useful to check before redirecting based on a URL from user submissions
- * through $_GET or $_POST, and avoid phishing attacks by redirecting
- * to an attackers server.
+ * Useful to check before redirecting based on a URL from user submissions through $_GET or $_POST,
+ * and avoid phishing attacks by redirecting to an attackers server.
*
* Note: Can't solely rely on PHP's parse_url() , since it is not intended to work with relative URLs
* or for security purposes. filter_var($url, FILTER_VALIDATE_URL) has similar problems.
*
* @param string $url
- * @return boolean
+ *
+ * @return bool
*/
public static function is_absolute_url($url) {
// Strip off the query and fragment parts of the URL before checking
@@ -760,26 +798,27 @@ class Director implements TemplateGlobalProvider {
}
/**
- * Checks if a given URL is relative (or root relative) by checking {@link is_absolute_url()}
+ * Checks if a given URL is relative (or root relative) by checking {@link is_absolute_url()}.
*
* @param string $url
- * @return boolean
+ *
+ * @return bool
*/
public static function is_relative_url($url) {
return !static::is_absolute_url($url);
}
/**
- * Checks if the given URL is belonging to this "site" (not an external link).
- * That's the case if the URL is relative, as defined by {@link is_relative_url()},
- * or if the host matches {@link protocolAndHost()}.
+ * Checks if the given URL is belonging to this "site" (not an external link). That's the case if
+ * the URL is relative, as defined by {@link is_relative_url()}, or if the host matches
+ * {@link protocolAndHost()}.
*
- * Useful to check before redirecting based on a URL from user submissions
- * through $_GET or $_POST, and avoid phishing attacks by redirecting
- * to an attackers server.
+ * Useful to check before redirecting based on a URL from user submissions through $_GET or $_POST,
+ * and avoid phishing attacks by redirecting to an attackers server.
*
* @param string $url
- * @return boolean
+ *
+ * @return bool
*/
public static function is_site_url($url) {
$urlHost = parse_url($url, PHP_URL_HOST);
@@ -795,6 +834,7 @@ class Director implements TemplateGlobalProvider {
* Takes a $_SERVER data array and extracts HTTP request headers.
*
* @param array $server
+ *
* @return array
*/
public static function extract_request_headers(array $server) {
@@ -819,6 +859,7 @@ class Director implements TemplateGlobalProvider {
* Given a filesystem reference relative to the site root, return the full file-system path.
*
* @param string $file
+ *
* @return string
*/
public static function getAbsFile($file) {
@@ -826,8 +867,11 @@ class Director implements TemplateGlobalProvider {
}
/**
- * Returns true if the given file exists.
- * @param $file Filename specified relative to the site root
+ * Returns true if the given file exists. Filename should be relative to the site root.
+ *
+ * @param $file
+ *
+ * @return bool
*/
public static function fileExists($file) {
// replace any appended query-strings, e.g. /path/to/foo.php?bar=1 to /path/to/foo.php
@@ -848,7 +892,10 @@ class Director implements TemplateGlobalProvider {
}
/**
- * Returns the Absolute URL of the site root, embedding the current basic-auth credentials into the URL.
+ * Returns the Absolute URL of the site root, embedding the current basic-auth credentials into
+ * the URL.
+ *
+ * @return string
*/
public static function absoluteBaseURLWithAuth() {
$s = "";
@@ -862,7 +909,7 @@ class Director implements TemplateGlobalProvider {
/**
* Skip any further processing and immediately respond with a redirect to the passed URL.
*
- * @param string $destURL - The URL to redirect to
+ * @param string $destURL
*/
protected static function force_redirect($destURL) {
$response = new SS_HTTPResponse();
@@ -895,15 +942,16 @@ class Director implements TemplateGlobalProvider {
* if(Director::isLive()) Director::forceSSL(array('/^admin/', '/^Security/'), 'secure.mysite.com');
*
*
- * Note that the session data will be lost when moving from HTTP to HTTPS.
- * It is your responsibility to ensure that this won't cause usability problems.
+ * Note that the session data will be lost when moving from HTTP to HTTPS. It is your responsibility
+ * to ensure that this won't cause usability problems.
*
* CAUTION: This does not respect the site environment mode. You should check this
* as per the above examples using Director::isLive() or Director::isTest() for example.
*
- * @param array $patterns Array of regex patterns to match URLs that should be HTTPS
- * @param string $secureDomain Secure domain to redirect to. Defaults to the current domain
- * @return boolean|string String of URL when unit tests running, boolean FALSE if patterns don't match request URI
+ * @param array $patterns Array of regex patterns to match URLs that should be HTTPS.
+ * @param string $secureDomain Secure domain to redirect to. Defaults to the current domain.
+ *
+ * @return bool|string String of URL when unit tests running, boolean FALSE if patterns don't match request URI.
*/
public static function forceSSL($patterns = null, $secureDomain = null) {
if(!isset($_SERVER['REQUEST_URI'])) return false;
@@ -963,11 +1011,10 @@ class Director implements TemplateGlobalProvider {
}
/**
- * Checks if the current HTTP-Request is an "Ajax-Request"
- * by checking for a custom header set by jQuery or
- * wether a manually set request-parameter 'ajax' is present.
+ * Checks if the current HTTP-Request is an "Ajax-Request" by checking for a custom header set by
+ * jQuery or whether a manually set request-parameter 'ajax' is present.
*
- * @return boolean
+ * @return bool
*/
public static function is_ajax() {
if(Controller::has_curr()) {
@@ -981,50 +1028,50 @@ class Director implements TemplateGlobalProvider {
}
/**
- * Returns true if this script is being run from the command line rather than the webserver.
+ * Returns true if this script is being run from the command line rather than the web server.
*
- * @return boolean
+ * @return bool
*/
public static function is_cli() {
return (php_sapi_name() == "cli");
}
- ////////////////////////////////////////////////////////////////////////////////////////////
- // Environment type methods
- ////////////////////////////////////////////////////////////////////////////////////////////
-
/**
* Set the environment type of the current site.
*
* Typically, a SilverStripe site have a number of environments:
- * - development environments, such a copy on your local machine.
- * - test sites, such as the one you show the client before going live.
- * - the live site itself.
+ * - Development environments, such a copy on your local machine.
+ * - Test sites, such as the one you show the client before going live.
+ * - The live site itself.
*
- * The behaviour of these environments often varies slightly. For example, development sites may have errors
- * dumped to the screen, and order confirmation emails might be sent to the developer instead of the client.
+ * The behaviour of these environments often varies slightly. For example, development sites may
+ * have errors dumped to the screen, and order confirmation emails might be sent to the developer
+ * instead of the client.
*
- * To help with this, SilverStripe supports the notion of an environment type. The environment type can be dev,
- * test, or live.
+ * To help with this, SilverStripe supports the notion of an environment type. The environment
+ * type can be dev, test, or live.
*
- * You can set it explicitly with Director::set_environment_tpye(). Or you can use
- * {@link Director::$dev_servers} and {@link Director::$test_servers} to set it implicitly, based on the
- * value of $_SERVER['HTTP_HOST']. If the HTTP_HOST value is one of the servers listed, then the environment type
- * will be test or dev. Otherwise, the environment type will be live.
+ * You can set it explicitly with {@link Director::set_environment_type()}. Or you can use
+ * {@link Director::$dev_servers} and {@link Director::$test_servers} to set it implicitly, based
+ * on the value of $_SERVER['HTTP_HOST']. If the HTTP_HOST value is one of the servers listed,
+ * then the environment type will be test or dev. Otherwise, the environment type will be live.
*
- * Dev mode can also be forced by putting ?isDev=1 in your URL, which will ask you to log in and then push the
- * site into dev mode for the remainder of the session. Putting ?isDev=0 onto the URL can turn it back.
+ * Dev mode can also be forced by putting ?isDev=1 in your URL, which will ask you to log in and
+ * then push the site into dev mode for the remainder of the session. Putting ?isDev=0 onto the URL
+ * can turn it back.
*
- * Test mode can also be forced by putting ?isTest=1 in your URL, which will ask you to log in and then push the
- * site into test mode for the remainder of the session. Putting ?isTest=0 onto the URL can turn it back.
+ * Test mode can also be forced by putting ?isTest=1 in your URL, which will ask you to log in and
+ * then push the site into test mode for the remainder of the session. Putting ?isTest=0 onto the URL
+ * can turn it back.
*
* Generally speaking, these methods will be called from your _config.php file.
*
- * Once the environment type is set, it can be checked with {@link Director::isDev()}, {@link Director::isTest()},
- * and {@link Director::isLive()}.
+ * Once the environment type is set, it can be checked with {@link Director::isDev()},
+ * {@link Director::isTest()}, and {@link Director::isLive()}.
*
* @deprecated 4.0 Use the "Director.environment_type" config setting instead
- * @param $et string The environment type: dev, test, or live.
+ *
+ * @param $et string
*/
public static function set_environment_type($et) {
if($et != 'dev' && $et != 'test' && $et != 'live') {
@@ -1037,9 +1084,10 @@ class Director implements TemplateGlobalProvider {
}
/**
- * Can also be checked with {@link Director::isDev()}, {@link Director::isTest()}, and {@link Director::isLive()}.
+ * Can also be checked with {@link Director::isDev()}, {@link Director::isTest()}, and
+ * {@link Director::isLive()}.
*
- * @return string 'dev', 'test' or 'live'
+ * @return bool|string
*/
public static function get_environment_type() {
if(Director::isLive()) {
@@ -1053,17 +1101,21 @@ class Director implements TemplateGlobalProvider {
}
}
- /*
- * This function will return true if the site is in a live environment.
- * For information about environment types, see {@link Director::set_environment_type()}.
+ /**
+ * This function will return true if the site is in a live environment. For information about
+ * environment types, see {@link Director::set_environment_type()}.
+ *
+ * @return bool
*/
public static function isLive() {
return !(Director::isDev() || Director::isTest());
}
/**
- * This function will return true if the site is in a development environment.
- * For information about environment types, see {@link Director::set_environment_type()}.
+ * This function will return true if the site is in a development environment. For information about
+ * environment types, see {@link Director::set_environment_type()}.
+ *
+ * @return bool
*/
public static function isDev() {
// Check session
@@ -1082,8 +1134,10 @@ class Director implements TemplateGlobalProvider {
}
/**
- * This function will return true if the site is in a test environment.
- * For information about environment types, see {@link Director::set_environment_type()}.
+ * This function will return true if the site is in a test environment. For information about
+ * environment types, see {@link Director::set_environment_type()}.
+ *
+ * @return bool
*/
public static function isTest() {
// In case of isDev and isTest both being set, dev has higher priority
@@ -1105,9 +1159,9 @@ class Director implements TemplateGlobalProvider {
}
/**
- * Check or update any temporary environment specified in the session
+ * Check or update any temporary environment specified in the session.
*
- * @return string 'test', 'dev', or null
+ * @return null|string
*/
protected static function session_environment() {
// Set session from querystring
@@ -1135,8 +1189,10 @@ class Director implements TemplateGlobalProvider {
}
/**
- * @return array Returns an array of strings of the method names of methods on the call that should be exposed
+ * Returns an array of strings of the method names of methods on the call that should be exposed
* as global variables in the templates.
+ *
+ * @return array
*/
public static function get_template_global_variables() {
return array(
diff --git a/control/FlushRequestFilter.php b/control/FlushRequestFilter.php
index ab7133ffb..234aaf119 100644
--- a/control/FlushRequestFilter.php
+++ b/control/FlushRequestFilter.php
@@ -3,10 +3,20 @@
* Triggers a call to flush() on all implementors of Flushable.
*
* @package framework
+ *
* @subpackage control
*/
class FlushRequestFilter implements RequestFilter {
+ /**
+ * @inheritdoc
+ *
+ * @param SS_HTTPRequest $request
+ * @param Session $session
+ * @param DataModel $model
+ *
+ * @return bool
+ */
public function preRequest(SS_HTTPRequest $request, Session $session, DataModel $model) {
if(array_key_exists('flush', $request->getVars())) {
foreach(ClassInfo::implementorsOf('Flushable') as $class) {
@@ -17,6 +27,15 @@ class FlushRequestFilter implements RequestFilter {
return true;
}
+ /**
+ * @inheritdoc
+ *
+ * @param SS_HTTPRequest $request
+ * @param SS_HTTPResponse $response
+ * @param DataModel $model
+ *
+ * @return bool
+ */
public function postRequest(SS_HTTPRequest $request, SS_HTTPResponse $response, DataModel $model) {
return true;
}
diff --git a/control/HTTP.php b/control/HTTP.php
index b3bdc816d..84b5d73f6 100644
--- a/control/HTTP.php
+++ b/control/HTTP.php
@@ -1,39 +1,42 @@
*
'"../../" . $URL'
'myRewriter($URL)'
'(substr($URL, 0, 1)=="/") ? "../" . substr($URL, 1) : $URL'
* function($url) {
* return Director::absoluteURL($url, true);
* }
*
*
- * @param string $content The HTML to search for links to rewrite
- * @param string|callable $code Either a string that can evaluate to an expression
- * to rewrite links (depreciated), or a callable that takes a single
- * parameter and returns the rewritten URL
- * @return The content with all links rewritten as per the logic specified in $code
+ * @param string $content The HTML to search for links to rewrite.
+ * @param string|callable $code Either a string that can evaluate to an expression to rewrite links
+ * (depreciated), or a callable that takes a single parameter and returns the rewritten URL.
+ *
+ * @return The content with all links rewritten as per the logic specified in $code.
*/
public static function urlRewriter($content, $code) {
if(!is_callable($code)) {
@@ -146,23 +151,21 @@ class HTTP {
}
/**
- * Will try to include a GET parameter for an existing URL,
- * preserving existing parameters and fragments.
- * If no URL is given, falls back to $_SERVER['REQUEST_URI'].
- * Uses parse_url() to dissect the URL, and http_build_query() to reconstruct it
- * with the additional parameter. Converts any '&' (ampersand)
- * URL parameter separators to the more XHTML compliant '&'.
+ * Will try to include a GET parameter for an existing URL, preserving existing parameters and
+ * fragments. If no URL is given, falls back to $_SERVER['REQUEST_URI']. Uses parse_url() to
+ * dissect the URL, and http_build_query() to reconstruct it with the additional parameter.
+ * Converts any '&' (ampersand) URL parameter separators to the more XHTML compliant '&'.
*
- * CAUTION: If the URL is determined to be relative,
- * it is prepended with Director::absoluteBaseURL().
- * This method will always return an absolute URL because
- * Director::makeRelative() can lead to inconsistent results.
+ * CAUTION: If the URL is determined to be relative, it is prepended with Director::absoluteBaseURL().
+ * This method will always return an absolute URL because Director::makeRelative() can lead to
+ * inconsistent results.
*
* @param string $varname
* @param string $varvalue
- * @param string $currentURL Relative or absolute URL (Optional).
- * @param string $separator Separator for http_build_query(). (Optional).
- * @return string Absolute URL
+ * @param string $currentURL Relative or absolute URL.
+ * @param string $separator Separator for http_build_query().
+ *
+ * @return string
*/
public static function setGetVar($varname, $varvalue, $currentURL = null, $separator = '&') {
$uri = $currentURL ? $currentURL : Director::makeRelative($_SERVER['REQUEST_URI']);
@@ -212,16 +215,25 @@ class HTTP {
return $newUri;
}
+ /**
+ * @param string $varname
+ * @param string $varvalue
+ * @param null|string $currentURL
+ *
+ * @return string
+ */
public static function RAW_setGetVar($varname, $varvalue, $currentURL = null) {
$url = self::setGetVar($varname, $varvalue, $currentURL);
return Convert::xml2raw($url);
}
/**
- * Search for all tags with a specific attribute, then return the value of that attribute in a flat array.
+ * Search for all tags with a specific attribute, then return the value of that attribute in a
+ * flat array.
*
* @param string $content
- * @param array $attributes an array of tags to attributes, for example "[a] => 'href', [div] => 'id'"
+ * @param array $attributes An array of tags to attributes, for example "[a] => 'href', [div] => 'id'"
+ *
* @return array
*/
public static function findByTagAndAttribute($content, $attributes) {
@@ -243,23 +255,32 @@ class HTTP {
return count($result) ? $result : null;
}
+ /**
+ * @param string $content
+ *
+ * @return array
+ */
public static function getLinksIn($content) {
return self::findByTagAndAttribute($content, array("a" => "href"));
}
+ /**
+ * @param string $content
+ *
+ * @return array
+ */
public static function getImagesIn($content) {
return self::findByTagAndAttribute($content, array("img" => "src"));
}
/**
- * Get the MIME type based on a file's extension.
+ * Get the MIME type based on a file's extension. If the finfo class exists in PHP, and the file
+ * exists relative to the project root, then use that extension, otherwise fallback to a list of
+ * commonly known MIME types.
*
- * If the finfo class exists in PHP, and the file actually exists, then use that
- * extension, otherwise fallback to a list of commonly known MIME types.
+ * @param string $filename
*
- * @uses finfo
- * @param string $filename Relative path to filename from project root, e.g. "mysite/tests/file.csv"
- * @return string MIME type
+ * @return string
*/
public static function get_mime_type($filename) {
// If the finfo module is compiled into PHP, use it.
@@ -284,23 +305,34 @@ class HTTP {
}
/**
- * Set the maximum age of this page in web caches, in seconds
+ * Set the maximum age of this page in web caches, in seconds.
+ *
+ * @param int $age
*/
public static function set_cache_age($age) {
self::$cache_age = $age;
}
+ /**
+ * @param string $dateString
+ */
public static function register_modification_date($dateString) {
$timestamp = strtotime($dateString);
if($timestamp > self::$modification_date)
self::$modification_date = $timestamp;
}
+ /**
+ * @param int $timestamp
+ */
public static function register_modification_timestamp($timestamp) {
if($timestamp > self::$modification_date)
self::$modification_date = $timestamp;
}
+ /**
+ * @param string $etag
+ */
public static function register_etag($etag) {
self::$etag = $etag;
}
@@ -309,10 +341,13 @@ class HTTP {
* Add the appropriate caching headers to the response, including If-Modified-Since / 304 handling.
* Note that setting HTTP::$cache_age will overrule any cache headers set by PHP's
* session_cache_limiter functionality. It is your responsibility to ensure only cacheable data
- * is in fact cached, and HTTP::$cache_age isn't set when the HTTP body contains session-specific content.
+ * is in fact cached, and HTTP::$cache_age isn't set when the HTTP body contains session-specific
+ * content.
*
- * @param SS_HTTPResponse $body The SS_HTTPResponse object to augment. Omitted the argument or passing a string is
- * deprecated; in these cases, the headers are output directly.
+ * Omitting the $body argument or passing a string is deprecated; in these cases, the headers are
+ * output directly.
+ *
+ * @param SS_HTTPResponse $body
*/
public static function add_cache_headers($body = null) {
$cacheAge = self::$cache_age;
@@ -461,16 +496,21 @@ class HTTP {
/**
- * Return an {@link http://www.faqs.org/rfcs/rfc2822 RFC 2822} date in the
- * GMT timezone (a timestamp is always in GMT: the number of seconds
- * since January 1 1970 00:00:00 GMT)
+ * Return an {@link http://www.faqs.org/rfcs/rfc2822 RFC 2822} date in the GMT timezone (a timestamp
+ * is always in GMT: the number of seconds since January 1 1970 00:00:00 GMT)
+ *
+ * @param int $timestamp
+ *
+ * @return string
*/
public static function gmt_date($timestamp) {
return gmdate('D, d M Y H:i:s', $timestamp) . ' GMT';
}
- /*
+ /**
* Return static variable cache_age in second
+ *
+ * @return int
*/
public static function get_cache_age() {
return self::$cache_age;