From 403d6284bd2d97259a5e943c0c2fbb86dcdab5d8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lucas=20Garc=C3=ADa?= <lucas@codeccoop.org>
Date: Thu, 21 Sep 2023 15:12:58 +0200
Subject: [PATCH] feat: parse fileupload fields

---
 includes/submissions.php | 44 +++++++++++++++++++++++++++++-----------
 1 file changed, 32 insertions(+), 12 deletions(-)

diff --git a/includes/submissions.php b/includes/submissions.php
index 89f839a..8f3b303 100644
--- a/includes/submissions.php
+++ b/includes/submissions.php
@@ -12,7 +12,12 @@ function wpct_crm_forms_parse_form_entry($entry, $form)
     foreach ($form['fields'] as $field) {
         if ($field->type === 'consent') continue;
 
-        $input_name = $field->inputName ? $field->inputName : $field->label;
+        $input_name = $field->inputName
+            ? $field->inputName
+            : ($field->adminLabel
+                ? $field->adminLabel
+                : $field->label);
+
         $inputs = $field->get_entry_inputs();
         if (is_array($inputs)) {
             // composed fields
@@ -31,7 +36,7 @@ function wpct_crm_forms_parse_form_entry($entry, $form)
                 foreach ($inputs as $input) {
                     $value = rgar($entry, (string) $input['id']);
                     if ($input_name && $value) {
-                        $values[] = $value;
+                        $values[] = wpct_crm_forms_format_value($value, $field, $input);
                     }
                 }
 
@@ -40,7 +45,8 @@ function wpct_crm_forms_parse_form_entry($entry, $form)
         } else {
             // simple fields
             if ($input_name) {
-                $form_vals[$input_name] = rgar($entry, (string) $field->id);
+                $raw_value = rgar($entry, (string) $field->id);
+                $form_vals[$input_name] = wpct_crm_forms_format_value($raw_value, $field);
             }
         }
     }
@@ -48,6 +54,15 @@ function wpct_crm_forms_parse_form_entry($entry, $form)
     return $form_vals;
 }
 
+function wpct_crm_forms_format_value($value, $field, $input = null)
+{
+    if ($field->type === 'fileupload') {
+        if (!is_array($field->get_entry_inputs())) return json_decode($value)[0];
+    }
+
+    return $value;
+}
+
 function wpct_crm_forms_add_cord_id($form_values)
 {
     if (!isset($form_values['company_id']) || !$form_values['company_id']) {
@@ -104,6 +119,7 @@ function wpct_crm_forms_get_submission_payload($form_vals)
 /**
  * Pipe form submission transformations to get the submission post payload
  */
+add_filter('wpct_crm_forms_prepare_submission', 'wpct_crm_forms_prepare_submission', 10, 2);
 function wpct_crm_forms_prepare_submission($form_vals)
 {
     $form_vals = wpct_crm_forms_add_cord_id($form_vals);
@@ -111,22 +127,26 @@ function wpct_crm_forms_prepare_submission($form_vals)
     return wpct_crm_forms_get_submission_payload($form_vals);
 }
 
-add_filter('wpct_crm_forms_prepare_submission', 'wpct_crm_forms_prepare_submission', 10, 2);
-
 
 /**
  * Store uploads on a custom folder
  */
-add_filter('gform_upload_path', 'wpct_forms_sm_upload_path', 90);
-function wpct_forms_sm_upload_path()
+add_filter('gform_upload_path', 'wpct_crm_forms_upload_path', 90);
+function wpct_crm_forms_upload_path($path_info)
 {
     $upload_dir = wp_upload_dir();
-    $path = $upload_dir['basedir'] . '/forms';
-    if (!is_dir($path)) mkdir($path);
+    $basedir = dirname($upload_dir['basedir']);
+
+    $path = $basedir . '/crm-uploads';
+    if (!is_dir($path)) mkdir($path, 0700);
     $path .= '/' . date('Y');
-    if (!is_dir($path)) mkdir($path);
+    if (!is_dir($path)) mkdir($path, 0700);
     $path .= '/' . date('m');
-    if (!is_dir($path)) mkdir($path);
+    if (!is_dir($path)) mkdir($path, 0700);
+    $path_info['path'] = $path;
+
+    $url = content_url(str_replace($basedir, '', $path)) . '/';
+    $path_info['url'] = $url;
 
-    return $path;
+    return $path_info;
 };
-- 
GitLab