getDir() . '/' . $fileName); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents } /** * Get custom upload dir name of this application * @return string [directory path] */ public function _getDir() { $uploadDir = wp_upload_dir(); $folderName = apply_filters('fluent_community/upload_folder_name', FLUENT_COMMUNITY_UPLOAD_DIR); return $uploadDir['basedir'] . $folderName; } /** * Get absolute path of file using custom upload dir name of this application * @return string [file path] */ public function _getAbsolutePathOfFile($file) { return $this->_getDir() . '/' . $file; } /** * Upload files into custom upload dir of this application * @return array */ public function _uploadFromRequest() { return $this->_put(fluentCommunityApp('request')->files()); } /** * Upload files into custom upload dir of this application * @param array $files * @return array */ public function _put($files) { if (!function_exists('wp_handle_upload')) { require_once(ABSPATH . 'wp-admin/includes/file.php'); } $this->overrideUploadDir(); $uploadOverrides = ['test_form' => false]; $uploadedFiles = []; foreach ((array)$files as $file) { $filesArray = $file->toArray(); $originalName = $filesArray['name']; $uploadedFile = \wp_handle_upload($filesArray, $uploadOverrides); if (isset($uploadedFile['error'])) { $uploadedFiles[] = new \WP_Error('upload_error', $uploadedFile['error']); } $uploadedFile['original_name'] = $originalName; $uploadedFiles[] = $uploadedFile; } return $uploadedFiles; } /** * Delete a file from custom upload directory of this application * @param array $files * @return void */ public function _delete($files) { $files = (array)$files; foreach ($files as $file) { $arr = explode('/', $file); $fileName = end($arr); wp_delete_file($this->getDir() . '/' . $fileName); } } /** * Register filters for custom upload dir */ public function _overrideUploadDir() { add_filter('wp_handle_upload_prefilter', function ($file) { add_filter('upload_dir', [$this, '_setCustomUploadDir']); add_filter('wp_handle_upload', function ($fileinfo) { remove_filter('upload_dir', [$this, '_setCustomUploadDir']); $fileinfo['file'] = basename($fileinfo['file']); return $fileinfo; }); return $this->_renameFileName($file); }); } /** * Set plugin's custom upload dir * @param array $param * @return array $param */ public function _setCustomUploadDir($param) { $folderName = apply_filters('fluent_community/upload_folder_name', FLUENT_COMMUNITY_UPLOAD_DIR); $param['url'] = $param['baseurl'] . '/' . $folderName; $param['path'] = $param['basedir'] . '/' . $folderName; if (!is_dir($param['path'])) { mkdir($param['path'], 0755); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_mkdir $htaccessContent = '# END FluentCommunity\n# Disable parsing of PHP for some server configurations.\n\nSetHandler none\nSetHandler default-handler\nOptions -ExecCGI\nRemoveHandler .cgi .php .php3 .php4 .php5 .phtml .pl .py .pyc .pyo\n\n\nphp_flag engine off\n\n# END FluentCommunity'; file_put_contents($param['basedir'] . '/' . $folderName . '/.htaccess', $htaccessContent); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_file_put_contents } if (!file_exists($param['basedir'] . '/' . $folderName . '/index.php')) { $indexStubContent = "