standalone: prevent civi adding duplicate breadcrumbs (e.g. scheduled jobs)
authorRich Lott / Artful Robot <code.commits@artfulrobot.uk>
Thu, 27 Jul 2023 15:26:33 +0000 (16:26 +0100)
committerRich Lott / Artful Robot <code.commits@artfulrobot.uk>
Thu, 27 Jul 2023 15:26:33 +0000 (16:26 +0100)
CRM/Utils/System/Standalone.php

index febf546bc7fbce84efc848b0a9cd53f42fabecc9..584e9d7bc73bbc3360c2e933ab43d833f9035d47 100644 (file)
@@ -109,9 +109,21 @@ class CRM_Utils_System_Standalone extends CRM_Utils_System_Base {
    */
   public function appendBreadCrumb($breadcrumbs) {
     $crumbs = \Civi::$statics[__CLASS__]['breadcrumb'] ?? [];
-    $crumbs = array_merge($crumbs, $breadcrumbs);
+
+    foreach ($breadcrumbs as $crumb) {
+      $duplicate = FALSE;
+      foreach ($crumbs as $existingCrumb) {
+        if ($existingCrumb['url'] === $crumb['url']) {
+          $duplicate = TRUE;
+          break;
+        }
+      }
+      if (!$duplicate) {
+        $crumbs[] = $crumb;
+      }
+    }
     \Civi::$statics[__CLASS__]['breadcrumb'] = $crumbs;
-    CRM_Core_Smarty::singleton()->assign('breadcrumb', \Civi::$statics[__CLASS__]['breadcrumb']);
+    CRM_Core_Smarty::singleton()->assign('breadcrumb', $crumbs);
   }
 
   /**