Ejemplo n.º 1
0
 /**
  * Dispatch the request to the correct controller
  *
  * @param  null|Mad_Controller_Request_Http  $request
  * @param  null|Mad_Controller_Response_Http $response
  * @return void
  */
 public function dispatch($request = null, $response = null)
 {
     $t = new Horde_Support_Timer();
     $t->push();
     if ($response === null) {
         $response = new Mad_Controller_Response_Http();
     }
     if ($request === null) {
         $request = new Mad_Controller_Request_Http();
     }
     // request could not be parsed
     if ($request->isMalformed()) {
         $body = "Your request could not be understood by the server, " . "probably due to malformed syntax.\n\n";
         $exc = $request->getException();
         if ($exc && MAD_ENV != 'production') {
             $body .= $exc->getMessage();
         }
         $response->setStatus(400);
         $response->setBody($body);
         // dispatch request to controller
     } else {
         $controller = $this->recognize($request);
         $response = $controller->process($request, $response);
     }
     $time = $t->pop();
     $this->_logRequest($request, $time);
     $response->send();
 }
Ejemplo n.º 2
0
 /**
  * Send file headers for {@link sendFile()} and {@link sendData()}.
  *
  * @see     sendData()
  * @see     sendFile()
  * @param   array   $options
  */
 protected function _sendFileHeaders($options)
 {
     // validate options
     $valid = array('filename', 'type', 'disposition', 'length');
     $options = Mad_Support_Base::assertValidKeys($options, $valid);
     // default type/disposition/filename
     if (empty($options['type'])) {
         $options['type'] = 'application/octet-stream';
     }
     if (empty($options['disposition'])) {
         $options['disposition'] = 'attachment';
     }
     if (!empty($options['filename'])) {
         $options['disposition'] .= '; filename=' . $options['filename'];
     }
     $this->_response->setHeader('Expires: 0');
     $this->_response->setHeader('Content-Length: ' . $options['length']);
     $this->_response->setHeader('Content-Type: ' . $options['type']);
     $this->_response->setHeader('Content-Disposition: ' . $options['disposition']);
     $this->_response->setHeader('Content-Transfer-Encoding: binary');
     // allow for byte serving of pdf docs
     if (strstr($options['filename'], 'pdf')) {
         $this->_response->setHeader("Accept-Ranges: bytes");
         $this->_response->setHeader("bytes: 0-");
     }
 }