From a3138c9eddcb037ce5a2b0bd3466e77dc4c018fe Mon Sep 17 00:00:00 2001 From: Jamie McClelland Date: Tue, 18 Oct 2016 15:04:15 -0400 Subject: [PATCH] CRM-19534 - avoid DB constraint violation if dashboard exists --- CRM/Core/BAO/Dashboard.php | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/CRM/Core/BAO/Dashboard.php b/CRM/Core/BAO/Dashboard.php index 91e560c6c7..84b1509718 100644 --- a/CRM/Core/BAO/Dashboard.php +++ b/CRM/Core/BAO/Dashboard.php @@ -431,15 +431,10 @@ class CRM_Core_BAO_Dashboard extends CRM_Core_DAO_Dashboard { $contactIDs = array(); if ($admin) { $query = "SELECT distinct( contact_id ) - FROM civicrm_dashboard_contact - WHERE contact_id NOT IN ( - SELECT distinct( contact_id ) - FROM civicrm_dashboard_contact WHERE dashboard_id = {$dashlet->id} - )"; - + FROM civicrm_dashboard_contact"; $dao = CRM_Core_DAO::executeQuery($query); while ($dao->fetch()) { - $contactIDs[] = $dao->contact_id; + $contactIDs[$dao->contact_id] = NULL; } } else { @@ -447,15 +442,25 @@ class CRM_Core_BAO_Dashboard extends CRM_Core_DAO_Dashboard { $session = CRM_Core_Session::singleton(); $contactID = $session->get('userID'); if (!empty($contactID)) { - $contactIDs[] = $session->get('userID'); + $contactIDs[$contactID] = NULL; } } + // Remove contact ids that already have this dashlet to avoid DB + // constraint violation. + $query = "SELECT distinct( contact_id ) + FROM civicrm_dashboard_contact WHERE dashboard_id = {$dashlet->id}"; + $dao = CRM_Core_DAO::executeQuery($query); + $skipContactIDs = array(); + while ($dao->fetch()) { + if(array_key_exists($dao->contact_id, $contactIDs)) { + unset($contactIDs[$dao->contact_id]); + } + } if (!empty($contactIDs)) { - foreach ($contactIDs as $contactID) { + foreach ($contactIDs as $contactID => $value) { $valuesArray[] = " ( {$dashlet->id}, {$contactID} )"; } - $valuesString = implode(',', $valuesArray); $query = " INSERT INTO civicrm_dashboard_contact ( dashboard_id, contact_id ) -- 2.25.1