From 096ea16aad78c554c6f71ae07f83d7d80f5e398a Mon Sep 17 00:00:00 2001
From: pancho <pancho@15425.no-reply.drupal.org>
Date: Fri, 17 May 2019 16:38:03 -0400
Subject: [PATCH] Issue #3023330 by Pancho, Liam Morland: Consolidate duplicate
 form field instances parsed by pdftk

---
 fillpdf.module               | 23 ++++++++++++++++++-----
 tests/FillPdfTestHelper.test |  2 ++
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/fillpdf.module b/fillpdf.module
index 37d90f7..1a68591 100644
--- a/fillpdf.module
+++ b/fillpdf.module
@@ -1570,6 +1570,7 @@ function fillpdf_parse_pdf($fid) {
     ->execute();
 
   // Create fields.
+  $unique_fields = array();
   foreach ((array) $parsed_fields as $key => $field) {
     // Don't store "container" fields.
     if (!empty($field['type'])) {
@@ -1580,13 +1581,19 @@ function fillpdf_parse_pdf($fid) {
       // improper parsing.
       $field['name'] = str_replace('&#0;', '', $field['name']);
 
-      $record = array(
-        'label' => NULL,
-        'value' => '',
-      );
-      fillpdf_fields_create_update($fid, $field['name'], $record);
+      // Use the field name as key, so to consolidate duplicate fields.
+      $unique_fields[$field['name']] = TRUE;
     }
   }
+
+  // Save the fields that were parsed out (if any).
+  foreach (array_keys($unique_fields) as $pdf_key) {
+    $record = array(
+      'label' => NULL,
+      'value' => '',
+    );
+    fillpdf_fields_create_update($fid, $pdf_key, $record);
+  }
 }
 
 /**
@@ -1774,6 +1781,12 @@ function fillpdf_execute_parse($method, $fillpdf, $mode = 'url') {
           'value' => '',
           'type' => 'Text',
         ),
+        // Test duplicate name.
+        3 => [
+          'name' => 'ImageField',
+          'value' => '',
+          'type' => 'Pushbutton',
+        ],
       );
       break;
   }
diff --git a/tests/FillPdfTestHelper.test b/tests/FillPdfTestHelper.test
index dbee395..c8681cf 100644
--- a/tests/FillPdfTestHelper.test
+++ b/tests/FillPdfTestHelper.test
@@ -40,6 +40,8 @@ trait FillPdfTestHelper {
     $this->drupalPost('admin/structure/fillpdf', array(
       'files[upload_pdf]' => drupal_realpath(drupal_get_path('module', 'fillpdf') . '/tests/fillpdf_test_v4.pdf'),
     ), t('Upload'));
+    $this->assertText('fillpdf_test_v4.pdf was successfully uploaded.');
+    $this->assertResponse(200, "The duplicate field is consolidated and doesn't lead to an integrity constraint violation.");
   }
 
   /**
-- 
GitLab