/** * Handles request * @return mixed true on success, array of errors on handle failure * @throws PostFormException */ function handle(WebRequest $request) { if (!$request->getRequestMethod()->equals($this->getMethod())) { throw new PostFormException("Wrong request method"); } $variables = array_replace($request->getPostVars(), $request->getFilesVars()); $signName = $this->getSignatureFieldName(); if (!isset($variables[$signName])) { throw new PostFormException('Missing signature'); } if (!$this->importSignature($variables[$signName])) { throw new PostFormException('Malformed signature'); } if (isset($this->privateValues['referrer'])) { if ($this->privateValues['referrer'] != (string) $request->getHttpReferer()) { throw new PostFormException('Unexpected referrer `' . $this->privateValues['referrer'] . '`, expected `' . $request->getHttpReferer() . '`'); } } foreach ($this->buttons as $id => $callback) { if (isset($variables[$id]) && is_callable($callback)) { call_user_func($callback, $variables); return; } } $this->process($variables); }
/** * Notify about the fault * * @param string $email address to be notified about the fault * @param Exception $e uncaught exception that caused application fault * @return void */ protected function notify500($email, Exception $e) { // // TODO log this // $message = <<<EOT Crash at {$this->request->getHttpUrl()->getHost()}: {$e->getMessage()} The request: {$this->request->getHttpUrl()} Request method: {$this->request->getRequestMethod()} {$e->getTraceAsString()} EOT; mail($email, PHOEBIUS_SHORT_PRODUCT_NAME . "crash at {$this->request->getHttpUrl()->getHost()} (" . get_class($e) . ")", $message); }
function match(WebRequest $request) { if ($this->method) { if ($this->method->getValue() != $request->getRequestMethod()) { return; } } $url = $request->getHttpUrl(); $data = $this->routeData; if ($this->pathMatcher) { $pathData = $this->pathMatcher->match($url->getVirtualPath()); if (!is_array($pathData)) { return; } $data = array_merge($data, $pathData); } $query = $url->getQuery(); foreach ($this->queryStringRegs as $qsArg => $qsReg) { if (isset($query[$qsArg]) && preg_match($qsReg, $query[$qsArg])) { $data[$qsArg] = $query[$qsArg]; } else { return; } } return $data; }