/** * 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); }