diff --git a/restws_file.module b/restws_file.module index f3941b0..bed27b7 100644 --- a/restws_file.module +++ b/restws_file.module @@ -27,13 +27,13 @@ function restws_file_restws_request_alter(array &$request) { if (!isset($payload_obj->type)) { $node = node_load($request['id']); - $type = $node->type; + $bundle = $node->type; } else { - $type = $payload_obj->type; + $bundle = $payload_obj->type; } // Get field information for specified entity and type (bundle). - $fields_info = field_info_instances($resource_name, $type); + $fields_info = field_info_instances($resource_name, $bundle); // Loop through each field looking for image type. foreach ($fields_info as $field_name => $value) { $field_info = field_info_field($field_name); @@ -61,9 +61,13 @@ function restws_file_restws_request_alter(array &$request) { $base64_data[] = $enc_contents_item_or_fid; } } + + // Specific subdirectory specified in the field info instance. + $file_subdir_destination = isset($value['settings']['file_directory']) ? $value['settings']['file_directory'] . '/' : ''; + // Create the files for the base64 strings, so every fid (new or existing) // is now in $fid_array. - restws_file_create_files($type, $base64_data, $fid_array); + restws_file_create_files($type, $base64_data, $fid_array, $bundle, $file_subdir_destination); // Assign fids. restws_assign_fids($type, $field_name, $fid_array, $payload_obj); } @@ -120,6 +124,10 @@ function restws_assign_fids($type, $field_name, array $fid_array, &$payload_obj) * Array of base64-encoded strings, representing files or images. * @param array $fid_array * Array of file IDs that gets populated. + * @param string $bundle + * Node bundle. + * @param string $file_subdir_destination + * Subdirectory specified in the field info instance. * * @return bool * TRUE and $fid_array populated. @@ -127,7 +135,7 @@ function restws_assign_fids($type, $field_name, array $fid_array, &$payload_obj) * * @see restws_file_get_filename() */ -function restws_file_create_files($type, array $base64_data_array, array &$fid_array) { +function restws_file_create_files($type, array $base64_data_array, array &$fid_array, $bundle, $file_subdir_destination) { foreach ($base64_data_array as $enc_contents_item) { // Get base64 MIME type and data. $result = preg_split('/^data\:([^,\r\n]*)\;base64\,/', $enc_contents_item, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); @@ -140,7 +148,10 @@ function restws_file_create_files($type, array $base64_data_array, array &$fid_a watchdog('restws', "Data in file/image field could not be decoded from the request.", NULL, WATCHDOG_WARNING); return FALSE; } - $destination = file_default_scheme() . "://" . restws_file_get_filename($type, $mime_type); + $directory = file_default_scheme() . "://" . $file_subdir_destination; + file_prepare_directory($directory, FILE_CREATE_DIRECTORY); + $filename = restws_file_get_filename($type, $mime_type, $bundle); + $destination = $directory . $filename; // Save binary image in Drupal site's public file directory. if ($file = file_save_data($data, $destination)) { file_save($file); @@ -160,14 +171,16 @@ function restws_file_create_files($type, array $base64_data_array, array &$fid_a * Content type. * @param string $mime_type * MIME type of the file. + * @param string $bundle + * Node bundle. * * @see restws_file_get_file_extension_from_mime() */ -function restws_file_get_filename($type, $mime_type) { +function restws_file_get_filename($type, $mime_type, $bundle) { $ext = restws_file_get_file_extension_from_mime($mime_type); // Create filename (format: entity_name_timestamp.ext, e.g. // favorite_color_survey_1363723712.png). - $filename = $type . "_" . time() . "." . $ext; + $filename = $bundle . "_" . $type . "_" . time() . "." . $ext; return $filename; }