PluginProbe
Fluent Support – Helpdesk & Customer Support Ticket System / 2.4.0
Fluent Support – Helpdesk & Customer Support Ticket System v2.4.0
2.4.0 2.3.2 2.3.1 2.3.0 2.2.1 2.2.0 trunk 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.10.5 1.4.0 1.4.1 1.4.2 1.4.5 1.4.6 1.4.7 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 All 68 releases
← All changes | app/Services/Includes/FileSystem.php +104 -9 1.5.42.4.0 View file →
@@ -36,9 +36,9 @@
36 36 public function _getDir()
37 37 {
38 38 $uploadDir = wp_upload_dir();
39 39
40 - return $uploadDir['basedir'] . FLUENT_SUPPORT_UPLOAD_DIR;
40 + return $uploadDir['basedir'] . DIRECTORY_SEPARATOR . FLUENT_SUPPORT_UPLOAD_DIR;
41 41 }
42 42
43 43 /**
44 44 * Get absolute path of file using custom upload dir name of this application
@@ -71,11 +71,19 @@
71 71
72 72 $this->overrideUploadDir();
73 73
74 74 $uploadOverrides = ['test_form' => false];
75 + $uploadedFiles = [];
75 76
77 + $truncate_files = apply_filters('fluent_support/truncate_uploaded_file_names', false);
78 +
76 79 foreach ((array)$files as $file) {
77 80 $filesArray = $file->toArray();
81 +
82 + if ($truncate_files) {
83 + $filesArray['name'] = $this->truncateFileName($filesArray['name']);
84 + }
85 +
78 86 $extraData = Arr::only($filesArray, ['name', 'size']);
79 87 $uploadsData = \wp_handle_upload($filesArray, $uploadOverrides);
80 88 $uploadedFiles[] = array_merge($extraData, $uploadsData);
81 89 }
@@ -82,9 +90,91 @@
82 90
83 91 return $uploadedFiles;
84 92 }
85 93
94 + private function truncateFileName($fileName)
95 + {
96 + $file_extension = pathinfo($fileName, PATHINFO_EXTENSION);
97 + $file_base_name = pathinfo($fileName, PATHINFO_FILENAME);
98 +
99 + $max_base_length = 50 - strlen($file_extension) - 1;
100 + if (strlen($file_base_name) > $max_base_length) {
101 + $file_base_name = substr($file_base_name, 0, $max_base_length);
102 + }
103 +
104 + return $file_base_name . '.' . $file_extension;
105 + }
106 +
107 + public function _putAsContent($fileName, $fileContent)
108 + {
109 + add_filter('upload_dir', [$this, '_setCustomUploadDir']);
110 + $item = wp_upload_bits($fileName, null, $fileContent);
111 + remove_filter('upload_dir', [$this, '_setCustomUploadDir']);
112 + return $item;
113 + }
114 +
86 115 /**
116 + * Copy a file from custom upload directory of this application
117 + * @param string $source file path
118 + * @param int $ticketId
119 + * @return array | boolean
120 + */
121 + public function _copy($source)
122 + {
123 + if (!file_exists($source)) {
124 + return false;
125 + }
126 +
127 + [$destDir, $folderName] = $this->_getCustomDir();
128 + $fileName = basename($source);
129 + $destFile = $destDir . DIRECTORY_SEPARATOR . $fileName;
130 +
131 + $indexFile = $destDir.DIRECTORY_SEPARATOR.'index.html';
132 + if(!is_file($indexFile)) {
133 + @file_put_contents($indexFile, '');
134 + }
135 +
136 + if (@copy($source, $destFile)) {
137 + return $this->_updateUploadDirForCopy($fileName, $folderName);
138 + }
139 +
140 + return false;
141 + }
142 +
143 + private function _getCustomDir()
144 + {
145 + $folderName = '';
146 + $directory = $this->_getDir();
147 +
148 + if ($this->subDir) {
149 + $folderName .= DIRECTORY_SEPARATOR . $this->subDir;
150 + $directory .= $folderName;
151 + if (!is_dir($directory)) {
152 + @mkdir($directory, 0755);
153 + // we should add index.php file to prevent directory listing
154 + @file_put_contents($directory . DIRECTORY_SEPARATOR . 'index.html', '');
155 + }
156 + }
157 +
158 + return [$directory, $folderName];
159 + }
160 +
161 + private function _updateUploadDirForCopy($fileName, $folderName)
162 + {
163 + $uploadDir = wp_upload_dir();
164 + $destDir = $this->_getDir() . $folderName;
165 + $uploadDir['file_path'] = $destDir . DIRECTORY_SEPARATOR . $fileName;
166 + $uploadDir['basedir'] = $destDir;
167 + $uploadDir['subdir'] = $folderName;
168 + $uploadDir['url'] = $uploadDir['baseurl'] . DIRECTORY_SEPARATOR . FLUENT_SUPPORT_UPLOAD_DIR . $folderName . DIRECTORY_SEPARATOR . $fileName;
169 + $uploadDir['baseurl'] = $uploadDir['baseurl'] . DIRECTORY_SEPARATOR . FLUENT_SUPPORT_UPLOAD_DIR . $folderName;
170 +
171 +
172 +
173 + return $uploadDir;
174 + }
175 +
176 + /**
87 177 * Delete a file from custom upload directory of this application
88 178 * @param array $files
89 179 * @return void
90 180 */
@@ -125,14 +215,18 @@
125 215 * @return array $param
126 216 */
127 217 public function _setCustomUploadDir($param)
128 218 {
129 - $folderName = '/'.FLUENT_SUPPORT_UPLOAD_DIR;
219 + $folderName = '/' . FLUENT_SUPPORT_UPLOAD_DIR;
130 220
131 - if($this->subDir) {
132 - $folderName .= '/'.$this->subDir;
133 - if(!is_dir($param['basedir'] . $folderName)) {
134 - @mkdir($param['basedir'] . $folderName, 0755);
221 + if ($this->subDir) {
222 + $folderName .= '/' . $this->subDir;
223 + $temFile = $param['basedir'] . $folderName . '/index.html';
224 + if(!is_file($temFile)) {
225 + if (!is_dir($param['basedir'] . $folderName)) {
226 + @mkdir($param['basedir'] . $folderName, 0755);
227 + }
228 + @file_put_contents($temFile, '');
135 229 }
136 230 }
137 231
138 232 $param['url'] = $param['baseurl'] . $folderName;
@@ -138,11 +232,12 @@
138 232 $param['url'] = $param['baseurl'] . $folderName;
139 233
140 234 $param['path'] = $param['basedir'] . $folderName;
141 235
142 -
143 236 if (!is_dir($param['path'])) {
144 237 @mkdir($param['path'], 0755);
238 + // we should add index.php file to prevent directory listing
239 + @file_put_contents($param['basedir'] . $folderName . '/index.html', '');
145 240 }
146 241
147 242 return $param;
148 243 }
@@ -153,10 +248,10 @@
153 248 * @return array $file
154 249 */
155 250 public function _renameFileName($file)
156 251 {
157 - $prefix = 'fluent_support-' . md5(uniqid(rand())) . '___';
158 -
252 + $prefix = 'fluent_support-' . md5(uniqid(wp_rand())) . '___';
253 + $prefix = apply_filters('fluent_support/uploaded_file_name_prefix', $prefix);
159 254 $file['name'] = $prefix . $file['name'];
160 255 return $file;
161 256 }
162 257