/**
  * 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);
    }
Exemple #3
0
 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;
 }