Esempio n. 1
0
 /**
  * Detect and set the output format and mimetype
  *
  * This method bases it's detection on the ACCEPT header passed
  * to the API.
  *
  * @return array of mimetype, outputFormat and params
  */
 public function detectOutputFormat()
 {
     $mimetypes = Frapi_Output::getMimeTypeMap();
     if ($mimetypes) {
         $this->mimeMaps = $mimetypes;
     }
     $types = $this->parseAcceptHeader();
     $return = array('outputFormat' => false, 'mimetype' => false, 'params' => array());
     if (!empty($types)) {
         $mimetypes = $this->parseMimeTypes();
         foreach ($types as $type) {
             if (isset($this->mimeMaps[$type['mimetype']])) {
                 $return['outputFormat'] = $this->mimeMaps[$type['mimetype']];
                 $return['mimetype'] = $type['mimetype'];
                 $return['params'] = isset($type['params']) ? $type['params'] : array();
                 break;
             } else {
                 foreach ($mimetypes as $mimetype) {
                     $matches = array();
                     if (preg_match($mimetype['pattern'], $type['mimetype'], $matches)) {
                         $return['mimetype'] = $type['mimetype'];
                         $return['params'] = isset($type['params']) ? $type['params'] : array();
                         if ($mimetype['output_format'][0] == ':') {
                             $format = substr($mimetype['output_format'], 1);
                             if (!empty($matches[$format]) && Frapi_Rules::validateOutputType($matches[$format])) {
                                 $return['outputFormat'] = $matches[$format];
                             }
                         } else {
                             $return['outputFormat'] = $mimetype['output_format'];
                         }
                         foreach ($mimetype['params'] as $param) {
                             $return['params'][$param] = $matches[$param];
                         }
                         break 2;
                     }
                 }
             }
         }
     }
     // Final catch-all (for cases like Accept: */*)
     if (!$return['outputFormat']) {
         $return['outputFormat'] = $this->getDefaultFormatFromConfiguration();
         $return['mimetype'] = Frapi_Output::getMimeTypeByFormat($return['outputFormat']);
     }
     $this->setOutputFormat($return['outputFormat']);
     return $return;
 }
Esempio n. 2
0
 /**
  * reads the Content-Type header; sets request body format if a valid mime type exists
  *
  * @return void
  */
 public function setInputFormat()
 {
     $contentType = isset($_SERVER['CONTENT_TYPE']) ? $_SERVER['CONTENT_TYPE'] : null;
     $mimetypes = Frapi_Output::getMimeTypeMap();
     if ($mimetypes) {
         $this->mimeMaps = $mimetypes;
     }
     if (!empty($contentType) && isset($this->mimeMaps[$contentType]) && in_array($this->mimeMaps[$contentType], $this->allowedInputTypes)) {
         $this->inputFormat = $this->mimeMaps[$contentType];
     }
 }