From bf9db8044f1b51d6a732f8dfbf17b6227855b11b Mon Sep 17 00:00:00 2001
From: s j <sj@1729.be>
Date: Mon, 7 Aug 2023 16:10:02 +0200
Subject: [PATCH 1/2] imp: I-7731 configure email from address

---
 config/schema/dsr_civicrm.schema.yml |  5 ++++-
 dsr_civicrm.links.menu.yml           |  6 ++++++
 src/DsrCivicrmService.php            | 22 +++++++++++++++++++---
 src/Form/DsrCivicrmConfigForm.php    | 23 +++++++++++++++++++++++
 4 files changed, 52 insertions(+), 4 deletions(-)
 create mode 100644 dsr_civicrm.links.menu.yml

diff --git a/config/schema/dsr_civicrm.schema.yml b/config/schema/dsr_civicrm.schema.yml
index 5ad5955..2d5f6cf 100644
--- a/config/schema/dsr_civicrm.schema.yml
+++ b/config/schema/dsr_civicrm.schema.yml
@@ -12,6 +12,8 @@ dsr_civicrm.settings:
             type: string
           civicrm_pdf_template_id:
             type: string
+          from_email_address:
+            type: string
           languages:
             type: sequence
             sequence:
@@ -23,6 +25,8 @@ dsr_civicrm.settings:
                   type: string
                 civicrm_pdf_template_id:
                   type: string
+                from_email_address:
+                  type: string
     civicrm_custom_fields:
       type: sequence
       sequence:
@@ -36,4 +40,3 @@ dsr_civicrm.settings:
       type: string
     civicrm_mobile_field:
       type: string
-
diff --git a/dsr_civicrm.links.menu.yml b/dsr_civicrm.links.menu.yml
new file mode 100644
index 0000000..3aa4e54
--- /dev/null
+++ b/dsr_civicrm.links.menu.yml
@@ -0,0 +1,6 @@
+dsr_civicrm.config:
+  title: 'DSR Civicrm Settings'
+  route_name: dsr_civicrm.dsr_civicrm_config_form
+  description: 'Configure DSR Civicrm.'
+  parent: system.admin_config_shareholder_register
+  weight: 50
diff --git a/src/DsrCivicrmService.php b/src/DsrCivicrmService.php
index 612fb38..8b8a62f 100644
--- a/src/DsrCivicrmService.php
+++ b/src/DsrCivicrmService.php
@@ -198,15 +198,31 @@ class DsrCivicrmService implements EventSubscriberInterface, DsrCivicrmServiceIn
       'MessageTemplate', [
         'sequential' => 1,
         'workflow_name' => ['IS NULL' => 1],
-	'options' => [
-	  'limit' => 1000,
-	],
+        'options' => [
+          'limit' => 1000,
+        ],
       ]
     );
 
     return $templates;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  function getFromAddresses() {
+    $civi = \Drupal::service('civicrm_tools.api');
+    $addresses = $civi->get(
+      'OptionValue', [
+        'sequential' => 1,
+        'option_group_id' => "from_email_address",
+      ]
+    );
+
+    return $addresses;
+  }
+
+
   /**
    * {@inheritdoc}
    */
diff --git a/src/Form/DsrCivicrmConfigForm.php b/src/Form/DsrCivicrmConfigForm.php
index 6c92896..db10379 100644
--- a/src/Form/DsrCivicrmConfigForm.php
+++ b/src/Form/DsrCivicrmConfigForm.php
@@ -43,6 +43,12 @@ class DsrCivicrmConfigForm extends ConfigFormBase {
       $template_options[$available_template['id']] = $available_template['msg_title'];
     }
 
+    $available_from_addresses = \Drupal::service('dsr_civicrm.default')->getFromAddresses();
+    $from_address_options = [];
+    foreach ($available_from_addresses as $available_from_address) {
+      $from_address_options[$available_from_address['id']] = $available_from_address['label'];
+    }
+
     $form['civicrm_phone_field'] = [
       '#type' => 'textfield',
       '#title' => $this->t('Phone field'),
@@ -87,6 +93,14 @@ class DsrCivicrmConfigForm extends ConfigFormBase {
         '#title' => $this->t('Civicrm pdf template ID'),
         '#default_value' => $item_id === 'new' ? '' : $item['civicrm_pdf_template_id'],
       ];
+      $form['mail-templates'][$item_id]['from_email_address'] = [
+        '#type' => 'select',
+        '#options' => $from_address_options,
+        '#empty_value' => '',
+        '#title' => $this->t('Civicrm from email address'),
+        '#default_value' => $item_id === 'new' ? '' : $item['from_email_address'],
+      ];
+
       $form['mail-templates'][$item_id]['languages'] = [
         '#type' => 'details',
         '#title' => $this->t("Language overrides"),
@@ -117,6 +131,14 @@ class DsrCivicrmConfigForm extends ConfigFormBase {
           '#title' => $this->t('Civicrm pdf template ID'),
           '#default_value' => $item_id === 'new' || !isset($lang_config[$langcode]) ? '' : $lang_config[$langcode]['civicrm_pdf_template_id'],
         ];
+        $form['mail-templates'][$item_id]['languages'][$langcode]['from_email_address'] = [
+          '#type' => 'select',
+          '#options' => $from_address_options,
+          '#empty_value' => '',
+          '#title' => $this->t('Civicrm from email address'),
+          '#default_value' => $item_id === 'new' || !isset($lang_config[$langcode]) ? '' : $lang_config[$langcode]['from_email_address'],
+        ];
+
       }
     }
 
@@ -183,6 +205,7 @@ class DsrCivicrmConfigForm extends ConfigFormBase {
         'drupal_mail_id' => $v['drupal_mail_id'],
         'civicrm_template_id' => $v['civicrm_template_id'],
         'civicrm_pdf_template_id' => $v['civicrm_pdf_template_id'],
+        'from_email_address' => $v['from_email_address'],
         'languages' => $languages,
       ];
     }
-- 
GitLab


From 25d8df02261d3042cb2082852c063029d05b2a22 Mon Sep 17 00:00:00 2001
From: s j <sj@1729.be>
Date: Mon, 7 Aug 2023 15:22:29 +0000
Subject: [PATCH 2/2] fix: use configured from address in api

---
 dsr_civicrm.module        | 40 +++++++++++++++++++++++++++------------
 src/DsrCivicrmService.php | 13 +++++++++++++
 2 files changed, 41 insertions(+), 12 deletions(-)

diff --git a/dsr_civicrm.module b/dsr_civicrm.module
index f76fbf0..f8e51fe 100644
--- a/dsr_civicrm.module
+++ b/dsr_civicrm.module
@@ -566,6 +566,7 @@ function dsr_civicrm_mail_alter(&$message) {
 
     $mail_template = $template['civicrm_template_id'];
     $pdf_template = $template['civicrm_pdf_template_id'];
+    $from_address_id = $template['from_email_address'];
 
     // Find language override.
 
@@ -585,6 +586,9 @@ function dsr_civicrm_mail_alter(&$message) {
             if ($lang['civicrm_pdf_template_id']) {
               $pdf_template = $lang['civicrm_pdf_template_id'];
             }
+            if ($lang['from_email_address']) {
+              $from_address_id = $lang['from_email_address'];
+            }
             break;
           }
         }
@@ -600,24 +604,36 @@ function dsr_civicrm_mail_alter(&$message) {
       }
     );
 
+    $api_data = [];
+    if ($from_address_id) { 
+      $mail_match = [];
+      $mail_str = \Drupal::service('dsr_civicrm.default')->getFromAddress($from_address_id);
+      preg_match('!"(.*?)"\s+<\s*(.*?)\s*>!', $mail_str, $mail_match);
+      $api_data['from_name'] = $mail_match[1];
+      $api_data['from_email'] = $mail_match[2];
+    }
+    
     if ($pdf_template) {
+      $pdf_data = $api_data + [
+        'contact_id' => $contactId,
+        'extra_data' => $extra_data,
+        'template_id' => $pdf_template,
+        'body_template_id' => $mail_template,
+        'email_activity' => TRUE,
+      ];
       $result = civicrm_api3(
-        'Pdf', 'Create', [
-          'contact_id' => $contactId,
-          'extra_data' => $extra_data,
-          'template_id' => $pdf_template,
-          'body_template_id' => $mail_template,
-          'email_activity' => TRUE,
-        ]
+        'Pdf', 'Create', $pdf_data
       );
     }
     else {
+      $mail_data = $api_data + [
+        'contact_id' => $contactId,
+        'extra_data' => $extra_data,
+        'template_id' => $mail_template,
+        // 'from_email_option' => $from_address_id,          
+      ];
       $result = civicrm_api3(
-        'Email', 'send', [
-          'contact_id' => $contactId,
-          'extra_data' => $extra_data,
-          'template_id' => $mail_template,
-        ]
+        'Email', 'send', $mail_data
       );
     }
     $message['send'] = FALSE;
diff --git a/src/DsrCivicrmService.php b/src/DsrCivicrmService.php
index 8b8a62f..8cc3bad 100644
--- a/src/DsrCivicrmService.php
+++ b/src/DsrCivicrmService.php
@@ -222,6 +222,19 @@ class DsrCivicrmService implements EventSubscriberInterface, DsrCivicrmServiceIn
     return $addresses;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  function getFromAddress($address_id) {
+    $civi = \Drupal::service('civicrm_tools.api');
+    $addresses = $civi->get(
+      'OptionValue', [
+        'sequential' => 1,
+        'id' => $address_id,
+      ]
+    );
+    return $addresses[0]['label'];
+  }    
 
   /**
    * {@inheritdoc}
-- 
GitLab