Show bounce history on Contact Summary
authorlarssandergreen <lars@wildsight.ca>
Thu, 27 Jul 2023 22:27:09 +0000 (16:27 -0600)
committerlarssandergreen <lars@wildsight.ca>
Fri, 28 Jul 2023 00:56:00 +0000 (18:56 -0600)
ext/civi_mail/ang/afsearchEmailBounceHistory.aff.html [new file with mode: 0644]
ext/civi_mail/ang/afsearchEmailBounceHistory.aff.json [new file with mode: 0644]
ext/civi_mail/info.xml
ext/civi_mail/managed/SavedSearch_Email_Bounce_History.mgd.php [new file with mode: 0644]
templates/CRM/Contact/Page/Inline/Email.tpl

diff --git a/ext/civi_mail/ang/afsearchEmailBounceHistory.aff.html b/ext/civi_mail/ang/afsearchEmailBounceHistory.aff.html
new file mode 100644 (file)
index 0000000..003d1fc
--- /dev/null
@@ -0,0 +1,4 @@
+<div af-fieldset="">
+  <crm-search-display-table search-name="Email_Bounce_History" display-name="Email_Bounce_History_Table" filters="{'MailingEventBounce_MailingEventQueue_event_queue_id_01.id': routeParams['MailingEventBounce_MailingEventQueue_event_queue_id_01.email_id']}">
+  </crm-search-display-table>
+</div>
diff --git a/ext/civi_mail/ang/afsearchEmailBounceHistory.aff.json b/ext/civi_mail/ang/afsearchEmailBounceHistory.aff.json
new file mode 100644 (file)
index 0000000..fc0020c
--- /dev/null
@@ -0,0 +1,7 @@
+{
+    "type": "search",
+    "title": "Email Bounce History",
+    "icon": "fa-list-alt",
+    "server_route": "civicrm/contact/view/bounces",
+    "permission": "access CiviCRM"
+}
index 13c08f6790c1cd1b4e54d97d066fddc6143fe2d6..089583adb546d021a45e8e37c4d0f48d3148b290 100644 (file)
@@ -29,6 +29,7 @@
   </classloader>
   <mixins>
     <mixin>scan-classes@1.0.0</mixin>
+    <mixin>mgd-php@1.0.0</mixin>
   </mixins>
   <civix>
     <namespace>CRM/Mailing</namespace>
diff --git a/ext/civi_mail/managed/SavedSearch_Email_Bounce_History.mgd.php b/ext/civi_mail/managed/SavedSearch_Email_Bounce_History.mgd.php
new file mode 100644 (file)
index 0000000..28b6967
--- /dev/null
@@ -0,0 +1,147 @@
+<?php
+use CRM_Mailing_ExtensionUtil as E;
+
+return [
+  [
+    'name' => 'SavedSearch_Email_Bounce_History',
+    'entity' => 'SavedSearch',
+    'cleanup' => 'always',
+    'update' => 'unmodified',
+    'params' => [
+      'version' => 4,
+      'values' => [
+        'name' => 'Email_Bounce_History',
+        'label' => E::ts('Email Bounce History'),
+        'form_values' => NULL,
+        'mapping_id' => NULL,
+        'search_custom_id' => NULL,
+        'api_entity' => 'MailingEventBounce',
+        'api_params' => [
+          'version' => 4,
+          'select' => [
+            'time_stamp',
+            'bounce_type_id:label',
+            'bounce_reason',
+            'MailingEventBounce_MailingEventQueue_event_queue_id_01_MailingEventQueue_MailingJob_job_id_01_MailingJob_Mailing_mailing_id_01.name',
+          ],
+          'orderBy' => [],
+          'where' => [],
+          'groupBy' => [],
+          'join' => [
+            [
+              'MailingEventQueue AS MailingEventBounce_MailingEventQueue_event_queue_id_01',
+              'INNER',
+              [
+                'event_queue_id',
+                '=',
+                'MailingEventBounce_MailingEventQueue_event_queue_id_01.id',
+              ],
+            ],
+            [
+              'MailingJob AS MailingEventBounce_MailingEventQueue_event_queue_id_01_MailingEventQueue_MailingJob_job_id_01',
+              'INNER',
+              [
+                'MailingEventBounce_MailingEventQueue_event_queue_id_01.job_id',
+                '=',
+                'MailingEventBounce_MailingEventQueue_event_queue_id_01_MailingEventQueue_MailingJob_job_id_01.id',
+              ],
+            ],
+            [
+              'Mailing AS MailingEventBounce_MailingEventQueue_event_queue_id_01_MailingEventQueue_MailingJob_job_id_01_MailingJob_Mailing_mailing_id_01',
+              'INNER',
+              [
+                'MailingEventBounce_MailingEventQueue_event_queue_id_01_MailingEventQueue_MailingJob_job_id_01.mailing_id',
+                '=',
+                'MailingEventBounce_MailingEventQueue_event_queue_id_01_MailingEventQueue_MailingJob_job_id_01_MailingJob_Mailing_mailing_id_01.id',
+              ],
+            ],
+          ],
+          'having' => [],
+        ],
+        'expires_date' => NULL,
+        'description' => NULL,
+      ],
+      'match' => [
+        'name',
+      ],
+    ],
+  ],
+  [
+    'name' => 'SavedSearch_Email_Bounce_History_SearchDisplay_Email_Bounce_History_Table',
+    'entity' => 'SearchDisplay',
+    'cleanup' => 'always',
+    'update' => 'unmodified',
+    'params' => [
+      'version' => 4,
+      'values' => [
+        'name' => 'Email_Bounce_History_Table',
+        'label' => E::ts('Email_Bounce_History'),
+        'saved_search_id.name' => 'Email_Bounce_History',
+        'type' => 'table',
+        'settings' => [
+          'description' => '',
+          'sort' => [
+            [
+              'time_stamp',
+              'DESC',
+            ],
+          ],
+          'limit' => 10,
+          'pager' => [
+            'hide_single' => TRUE,
+          ],
+          'placeholder' => 3,
+          'columns' => [
+            [
+              'type' => 'field',
+              'key' => 'time_stamp',
+              'dataType' => 'Timestamp',
+              'label' => E::ts('Date'),
+              'sortable' => TRUE,
+            ],
+            [
+              'type' => 'field',
+              'key' => 'bounce_type_id:label',
+              'dataType' => 'Integer',
+              'label' => E::ts('Type'),
+              'sortable' => TRUE,
+            ],
+            [
+              'type' => 'field',
+              'key' => 'bounce_reason',
+              'dataType' => 'String',
+              'label' => E::ts('Reason'),
+              'sortable' => TRUE,
+            ],
+            [
+              'type' => 'field',
+              'key' => 'MailingEventBounce_MailingEventQueue_event_queue_id_01_MailingEventQueue_MailingJob_job_id_01_MailingJob_Mailing_mailing_id_01.name',
+              'dataType' => 'String',
+              'label' => E::ts('Mailing'),
+              'sortable' => FALSE,
+              'link' => [
+                'path' => '',
+                'entity' => 'Mailing',
+                'action' => 'view',
+                'join' => 'MailingEventBounce_MailingEventQueue_event_queue_id_01_MailingEventQueue_MailingJob_job_id_01_MailingJob_Mailing_mailing_id_01',
+                'target' => 'crm-popup',
+              ],
+              'title' => NULL,
+            ],
+          ],
+          'actions' => FALSE,
+          'classes' => [
+            'table',
+            'table-striped',
+          ],
+          'noResultsText' => '',
+        ],
+        'acl_bypass' => FALSE,
+      ],
+      'match' => [
+        'name',
+        'saved_search_id',
+      ],
+    ],
+  ],
+];
index 9aeea5867635fdf1c711b8abe55242c273b4a64d..bdd8503bd0b294f57e0c5236fc845909394aec04 100644 (file)
@@ -45,7 +45,8 @@
         {else}
           {$item.email}
         {/if}
-        {if $item.on_hold == 2}&nbsp;({ts}On Hold - Opt Out{/ts})&nbsp;{ts}{$item.hold_date|truncate:10:''|crmDate}{/ts}{elseif $item.on_hold}&nbsp;({ts}On Hold{/ts})&nbsp;{ts}{$item.hold_date|truncate:10:''|crmDate}{/ts}{/if}{if $item.is_bulkmail}&nbsp;({ts}Bulk{/ts}){/if}
+        {crmAPI var='civi_mail' entity='Extension' action='get' full_name="civi_mail" is_active=1}
+        {if $item.on_hold == 2}&nbsp;({ts}On Hold - Opt Out{/ts})&nbsp;{ts}{$item.hold_date|truncate:10:''|crmDate}{/ts}{elseif $item.on_hold}&nbsp;{if $civi_mail.count}<a href="{crmURL p="civicrm/contact/view/bounces" q="email_id=`$item.id`"}" class="crm-popup" title="{ts 1=$item.email}Email Bounce History{/ts}">{/if}({ts}On Hold{/ts})&nbsp;{ts}{$item.hold_date|truncate:10:''|crmDate}{/ts}{if $civi_mail.count}&nbsp;<i class="crm-i fa-list-alt" aria-hidden="true"></i></a>{/if}{/if}{if $item.is_bulkmail}&nbsp;({ts}Bulk{/ts}){/if}
         {if !empty($item.signature_text) OR !empty($item.signature_html)}
         <span class="signature-link description">
           <a href="#" title="{ts}Signature{/ts}" onClick="showHideSignature( '{$blockId}' ); return false;">{ts}(signature){/ts}</a>