PluginProbe
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder / 1.5.3
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder v1.5.3
6.2.13 6.2.12 6.2.10 6.2.11 6.2.9 6.2.8 6.2.7 6.2.6 6.2.5 6.2.4 6.2.3 6.2.2 3.6.22 3.6.31 3.6.40 3.6.41 3.6.42 3.6.50 3.6.51 3.6.60 3.6.61 3.6.62 3.6.64 3.6.65 3.6.66 All 195 releases
fluentform / framework / Request / FileHandler.php

FileHandler.php in Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder 1.5.3, at framework/Request/FileHandler.php

111 lines 3.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentForm\Framework\Request;
4
5 trait FileHandler
6 {
7 /**
8 * Prepares HTTP files for Request
9 *
10 * @param array $files
11 *
12 * @return array
13 */
14 public function prepareFiles($files = [])
15 {
16 foreach ($files as $key => &$file) {
17 $file = $this->convertFileInformation($file);
18 }
19
20 return $files;
21 }
22
23 /**
24 * @taken from \Symfony\Component\HttpFoundation\FileBag
25 *
26 * Converts uploaded files to UploadedFile instances.
27 *
28 * @param array|File $file A (multi-dimensional) array of uploaded file information
29 *
30 * @return File[]|File|null A (multi-dimensional) array of File instances
31 */
32 protected function convertFileInformation($file)
33 {
34 $fileKeys = array('error', 'name', 'size', 'tmp_name', 'type');
35
36 if ($file instanceof File) {
37 return $file;
38 }
39
40 $file = $this->fixPhpFilesArray($file);
41
42 if (is_array($file)) {
43 $keys = array_keys($file);
44 sort($keys);
45
46 if ($keys == $fileKeys) {
47 if (UPLOAD_ERR_NO_FILE == $file['error']) {
48 $file = null;
49 } else {
50 $file = new File($file['tmp_name'], $file['name'], $file['type'], $file['size'], $file['error']);
51 }
52 } else {
53 $file = array_map(array($this, 'convertFileInformation'), $file);
54 if (array_keys($keys) === $keys) {
55 $file = array_filter($file);
56 }
57 }
58 }
59
60 return $file;
61 }
62
63 /**
64 * @taken from \Symfony\Component\HttpFoundation\FileBag
65 *
66 * Fixes a malformed PHP $_FILES array.
67 *
68 * PHP has a bug that the format of the $_FILES array differs, depending on
69 * whether the uploaded file fields had normal field names or array-like
70 * field names ("normal" vs. "parent[child]").
71 *
72 * This method fixes the array to look like the "normal" $_FILES array.
73 *
74 * It's safe to pass an already converted array, in which case this method
75 * just returns the original array unmodified.
76 *
77 * @return array
78 */
79 protected function fixPhpFilesArray($data)
80 {
81 $fileKeys = array('error', 'name', 'size', 'tmp_name', 'type');
82
83 if (! is_array($data)) {
84 return $data;
85 }
86
87 $keys = array_keys($data);
88 sort($keys);
89
90 if ($fileKeys != $keys || ! isset($data['name']) || ! is_array($data['name'])) {
91 return $data;
92 }
93
94 $files = $data;
95 foreach ($fileKeys as $k) {
96 unset($files[$k]);
97 }
98
99 foreach ($data['name'] as $key => $name) {
100 $files[$key] = $this->fixPhpFilesArray(array(
101 'error' => $data['error'][$key],
102 'name' => $name,
103 'type' => $data['type'][$key],
104 'tmp_name' => $data['tmp_name'][$key],
105 'size' => $data['size'][$key],
106 ));
107 }
108
109 return $files;
110 }
111 }