From 42ca86536ade013f0a263b3919da34194efc47bf Mon Sep 17 00:00:00 2001 From: Nicolas Dickinson Date: Mon, 16 Dec 2024 12:16:11 +0100 Subject: [PATCH 1/2] Removed duplicate processing of "attachment" type in addFormFieldSchemaCustomClass() --- R/formField.R | 2 -- 1 file changed, 2 deletions(-) diff --git a/R/formField.R b/R/formField.R index 080c557..bc8148f 100644 --- a/R/formField.R +++ b/R/formField.R @@ -114,8 +114,6 @@ addFormFieldSchemaCustomClass <- function(e) { class(e) <- c("activityInfoAttachmentFieldSchema", class(e)) } else if (e$type == "calculated") { class(e) <- c("activityInfoCalculatedFieldSchema", class(e)) - } else if (e$type == "attachment") { - class(e) <- c("activityInfoAttachmentFieldSchema", class(e)) } else if (e$type == "subform") { class(e) <- c("activityInfoSubformFieldSchema", class(e)) } else if (e$type == "geopoint") { From fcb987033d08b9308defe289b847ac91de6e82a8 Mon Sep 17 00:00:00 2001 From: Nicolas Dickinson Date: Tue, 17 Dec 2024 12:14:18 +0100 Subject: [PATCH 2/2] Skeleton for adding an attachment --- R/attachments.R | 134 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 R/attachments.R diff --git a/R/attachments.R b/R/attachments.R new file mode 100644 index 0000000..1cafe15 --- /dev/null +++ b/R/attachments.R @@ -0,0 +1,134 @@ +# Mime types +mime_type_mapping <- list( + aac = "audio/aac", + abw = "application/x-abiword", + apng = "image/apng", + arc = "application/x-freearc", + avif = "image/avif", + avi = "video/x-msvideo", + azw = "application/vnd.amazon.ebook", + bin = "application/octet-stream", + bmp = "image/bmp", + bz = "application/x-bzip", + bz2 = "application/x-bzip2", + cda = "application/x-cdf", + csh = "application/x-csh", + css = "text/css", + csv = "text/csv", + doc = "application/msword", + docx = "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + eot = "application/vnd.ms-fontobject", + epub = "application/epub+zip", + gz = "application/gzip", + gif = "image/gif", + htm = "text/html", + html = "text/html", + ico = "image/vnd.microsoft.icon", + ics = "text/calendar", + jar = "application/java-archive", + jpeg = "image/jpeg", + jpg = "image/jpeg", + js = "text/javascript", + json = "application/json", + jsonld = "application/ld+json", + mid = "audio/midi", + midi = "audio/x-midi", + mjs = "text/javascript", + mp3 = "audio/mpeg", + mp4 = "video/mp4", + mpeg = "video/mpeg", + mpkg = "application/vnd.apple.installer+xml", + odp = "application/vnd.oasis.opendocument.presentation", + ods = "application/vnd.oasis.opendocument.spreadsheet", + odt = "application/vnd.oasis.opendocument.text", + oga = "audio/ogg", + ogv = "video/ogg", + ogx = "application/ogg", + opus = "audio/ogg", + otf = "font/otf", + png = "image/png", + pdf = "application/pdf", + php = "application/x-httpd-php", + ppt = "application/vnd.ms-powerpoint", + pptx = "application/vnd.openxmlformats-officedocument.presentationml.presentation", + rar = "application/vnd.rar", + rtf = "application/rtf", + sh = "application/x-sh", + svg = "image/svg+xml", + tar = "application/x-tar", + tif = "image/tiff", + tiff = "image/tiff", + ts = "video/mp2t", + ttf = "font/ttf", + txt = "text/plain", + vsd = "application/vnd.visio", + wav = "audio/wav", + weba = "audio/webm", + webm = "video/webm", + webp = "image/webp", + woff = "font/woff", + woff2 = "font/woff2", + xhtml = "application/xhtml+xml", + xls = "application/vnd.ms-excel", + xlsx = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + xml = "application/xml", + xul = "application/vnd.mozilla.xul+xml", + zip = "application/zip", + `3gp` = "video/3gpp", + `3g2` = "video/3gpp2", + `7z` = "application/x-7z-compressed" +) + + +#' Add an attachment +#' +#' Stage an attachment to a formId, recordId, and fieldId +#' Commit the staged attachment + + +#' Stage attachment +#' +#' Stages an attachment to a form, field and record and returns the reference + + +#' Remove attachments +#' +#' Remove one or more attachment from a form, field and record + + +#' Gets an attachment +#' +#' Retrieve an attachment and store it to a temporary file. The name +#' of the temporary file is returned. +#' +#' @param formId a form id +#' @param recordId the record Id +#' @param fieldId the attachment field id +#' @param blobId the attachment blob id +#' @export +#' @family record functions +#' +getAttachment <- function(formId, recordId, fieldId, blobId) { + url <- modify_url(activityInfoRootUrl(), path = sprintf("resources/form/%s/record/%s/field/%s/blob/%s/signature.png", + formId, + recordId, + fieldId, + blobId)) + message("Sending GET request to ", url) + + tmp <- tempfile() + + result <- GET(url, activityInfoAuthentication(), accept_json(), write_disk(tmp)) + + checkForError(result) + + if (result$status_code != 200) { + stop(sprintf("Request for %s failed with status code %d %s: %s", + url, result$status_code, http_status(result$status_code)$message, + content(result, as = "text", encoding = "UTF-8"))) + } else { + message_for_status(result) + } + + tmp +} \ No newline at end of file