Exemplo n.º 1
0
 /**
  * @param callable $closure
  * @param array    $args
  *
  * @return $this
  */
 public function onSuccess(Closure $closure = NULL, $args = [])
 {
     $this->onSuccess = is_callable($closure) ? ['closure' => $closure, 'args' => Helpers_Arr::merge([$this], $args)] : NULL;
     return $this;
 }
Exemplo n.º 2
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;
 }
Exemplo n.º 3
0
 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']);
 }
Exemplo n.º 4
0
 /**
  * @param mixed  $value
  * @param array  $validationRules
  * @param string $file Validation errors file (default: validation)
  *
  * @return mixed
  * @throws Validation_Exception
  */
 protected function validateValue($value, array $validationRules = NULL, $file = NULL)
 {
     $validationRules = Helpers_Arr::merge([['not_empty']], NULL === $validationRules ? [] : $validationRules);
     $validation = Validation::factory(['key' => $value])->rules('key', $validationRules);
     if (!$validation->check()) {
         if (NULL === $file) {
             $file = 'validation';
         }
         $errors = Kohana_Arr::flatten($validation->errors($file));
         throw new Validation_Exception($validation, Kohana_Arr::get($errors, 'key', 'Undefined validation error'));
     }
     return $value;
 }