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