From 290110efc17b8b7f34b8919daf7ecec9658c535a Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Tue, 10 Oct 2017 21:25:20 +0100 Subject: [PATCH] Navigation - Fix serialization error Overview -------- The navigation subsystem stores per-user data in the table `civicrm_setting`. Most access to this table goes through `CRM_Core_BAO_Setting` or `Civi\Core\SettingsBag`. However, certain edge-cases produce a warning about a serialization error because `CRM_Core_BAO_Navigation` does not participate. Before ------ `CRM_Core_BAO_Navigation::resetNavigation()` generates malformed records which cannot be read via `CRM_Core_BAO_Setting` or `Civi\Core\SettingsBag`. After ----- `CRM_Core_BAO_Navigation::resetNavigation()` generates better records. --- CRM/Core/BAO/Navigation.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CRM/Core/BAO/Navigation.php b/CRM/Core/BAO/Navigation.php index b499f0ceb7..85121e374e 100644 --- a/CRM/Core/BAO/Navigation.php +++ b/CRM/Core/BAO/Navigation.php @@ -608,7 +608,8 @@ FROM civicrm_navigation WHERE domain_id = $domainID {$whereClause} ORDER BY pare public static function resetNavigation($contactID = NULL) { $newKey = CRM_Utils_String::createRandom(self::CACHE_KEY_STRLEN, CRM_Utils_String::ALPHANUMERIC); if (!$contactID) { - $query = "UPDATE civicrm_setting SET value = '$newKey' WHERE name='navigation' AND contact_id IS NOT NULL"; + $ser = serialize($newKey); + $query = "UPDATE civicrm_setting SET value = '$ser' WHERE name='navigation' AND contact_id IS NOT NULL"; CRM_Core_DAO::executeQuery($query); CRM_Core_BAO_Cache::deleteGroup('navigation'); } -- 2.25.1