Exemple #1
0
 /**
  * @param Exception  $e
  * @param int        $httpCode
  * @param null|array $headers
  *
  * @throws HTTP_Exception_Redirect
  */
 public static function exception(Exception $e, $httpCode = 500, $headers = NULL)
 {
     if ($e instanceof HTTP_Exception_Redirect) {
         throw $e;
     }
     if ($e instanceof HTTP_Exception) {
         $httpCode = $e->getCode();
     }
     self::json(Helpers_Arr::exception($e), $httpCode, $headers);
 }
Exemple #2
0
 /**
  * @param null $keys
  *
  * @return array
  */
 public function values($keys = NULL)
 {
     $values = array();
     /** @var $field Form_Field */
     foreach ($this->fields as $key => $field) {
         if (NULL === $keys || Helpers_Arr::inArray($key, $keys)) {
             $values[$key] = $field->getValue();
         }
     }
     return $values;
 }
 public static function makeRoute(RestfulAPI\Route $annotation, $defaults = [])
 {
     $defaults = Helpers_Arr::merge($annotation->defaults, $defaults, ['models' => $annotation->models]);
     return Route::set($annotation->name, $annotation->value, $annotation->regexp)->defaults($defaults)->filter([get_class(), 'route']);
 }
Exemple #4
0
 /**
  * @param Exception $e
  *
  * @return array|null
  */
 public static function exception(Exception $e = NULL)
 {
     if ($e instanceof Exception) {
         $data = ['message' => Helpers_Text::trimAsNULL($e->getMessage()), 'code' => $e->getCode()];
         if (!Kohana_Helpers_Core::isProduction()) {
             $data = Kohana_Helpers_Arr::merge($data, ['file' => $e->getFile(), 'line' => $e->getLine(), 'trace' => $e->getTrace(), 'previous' => Helpers_Arr::exception($e->getPrevious())]);
         }
     } else {
         $data = NULL;
     }
     return $data;
 }
Exemple #5
0
 public function getErrors()
 {
     return Helpers_Arr::asArray($this->_errors);
 }
Exemple #6
0
 /**
  * @param null|string $input
  * @param null|bool   $parseFiles
  *
  * @return array
  */
 public static function parseMultiPartContent($input = NULL, $parseFiles = NULL)
 {
     NULL !== $input or $input = static::current()->body();
     NULL !== $parseFiles or $parseFiles = static::config('request.data.parseBodyFiles.enabled', FALSE);
     $data = [];
     $files = $parseFiles ? [] : NULL;
     // grab multipart boundary from content type header
     preg_match('/boundary=["]*([^"\\s;]+)/', $_SERVER['CONTENT_TYPE'], $matches);
     if (count($matches)) {
         $boundary = preg_quote($matches[1]);
         // split content by boundary and get rid of last -- element
         $blocks = preg_split("/-+{$boundary}/", $input);
         // loop data blocks
         foreach ($blocks as $block) {
             if (empty($block)) {
                 continue;
             }
             $parts = preg_split('/[\\r\\n][\\r\\n]/', trim($block, "\r\n"), 2, PREG_SPLIT_NO_EMPTY);
             if (count($parts) != 2) {
                 continue;
             }
             list($raw_headers, $input) = $parts;
             if (preg_match('/name="([^"]+)"(; *filename="([^"]+)")?/', $raw_headers, $matches)) {
                 $name = rawurldecode($matches[1]);
                 $filename = isset($matches[3]) ? $matches[3] : NULL;
                 if (!isset($filename)) {
                     $input = Helpers_Text::trimAsNULL($input);
                     $_tmp = "{$name}={$input}";
                     $_data = NULL;
                     parse_str($_tmp, $_data);
                     $data = Helpers_Arr::merge($data, $_data);
                 } elseif (isset($files)) {
                     $_tmpname = tempnam(NULL, 'tmp');
                     if (FALSE !== $_tmpname) {
                         if (preg_match('@^Content-Type:@im', $input)) {
                             $input = trim(preg_replace('@^Content-Type:[^\\n]*@i', "", $input), "\r\n");
                         }
                         file_put_contents($_tmpname, $input);
                         chmod($_tmpname, static::config('request.data.parseBodyFiles.chmod', 0666));
                         $files[$name] = ['name' => $filename, 'type' => mime_content_type($_tmpname), 'tmp_name' => $_tmpname, 'error' => UPLOAD_ERR_OK, 'size' => filesize($_tmpname)];
                     }
                 }
             }
         }
         if (Kohana_Helpers_Arr::count($files)) {
             foreach ($files as $fileKey => $fileInfo) {
                 $_FILES[$fileKey] = $fileInfo;
             }
             if (static::config('request.data.parseBodyFiles.deleteOnShutdown', TRUE)) {
                 register_shutdown_function(function () use($files) {
                     foreach ($files as $row) {
                         @unlink($row['tmp_name']);
                     }
                 });
             }
         }
     }
     return $data;
 }
 public function before()
 {
     try {
         parent::before();
         $this->_parse_request();
         $this->validation(Helpers_Arr::flattenExtended($this->requestData()));
     } catch (Exception $e) {
         $this->exception($e);
     }
 }