From a68ee65fe713ac8e27df91c2c16238a2f5abb584 Mon Sep 17 00:00:00 2001 From: colemanw Date: Tue, 29 Aug 2023 11:46:28 -0400 Subject: [PATCH] Afform - make summary tab names less weird --- CRM/Upgrade/Incremental/php/FiveSixtySix.php | 48 +++++++++++++++++++ ext/afform/core/afform.php | 4 +- ...nts.aff.html => afsearchTabGrant.aff.html} | 0 ...nts.aff.json => afsearchTabGrant.aff.json} | 0 ext/civigrant/civigrant.php | 2 +- 5 files changed, 52 insertions(+), 2 deletions(-) rename ext/civigrant/ang/{afsearchGrants.aff.html => afsearchTabGrant.aff.html} (100%) rename ext/civigrant/ang/{afsearchGrants.aff.json => afsearchTabGrant.aff.json} (100%) diff --git a/CRM/Upgrade/Incremental/php/FiveSixtySix.php b/CRM/Upgrade/Incremental/php/FiveSixtySix.php index 38423bd73f..9358914d61 100644 --- a/CRM/Upgrade/Incremental/php/FiveSixtySix.php +++ b/CRM/Upgrade/Incremental/php/FiveSixtySix.php @@ -34,6 +34,7 @@ class CRM_Upgrade_Incremental_php_FiveSixtySix extends CRM_Upgrade_Incremental_B $this->addTask('Make ActionSchedule.name required', 'alterColumn', 'civicrm_action_schedule', 'name', "varchar(64) NOT NULL COMMENT 'physical tablename for entity being joined to discount, e.g. civicrm_event'"); $this->addTask(ts('Create index %1', [1 => 'civicrm_action_schedule.UI_name']), 'addIndex', 'civicrm_action_schedule', 'name', 'UI'); $this->addTask('Add fields to civicrm_mail_settings to allow more flexibility for email to activity', 'addMailSettingsFields'); + $this->addTask('Update afform tab names', 'updateAfformTabs'); } /** @@ -81,4 +82,51 @@ class CRM_Upgrade_Incremental_php_FiveSixtySix extends CRM_Upgrade_Incremental_B return TRUE; } + /** + * If the ContactLayout extension is installed, update its stored tab names to keep up + * with core changes to Afform tabs. + * + * @see https://github.com/civicrm/civicrm-core/pull/27196 + * + * @param \CRM_Queue_TaskContext $ctx + * + * @return bool + */ + public static function updateAfformTabs(CRM_Queue_TaskContext $ctx) { + $convert = function($id) { + if ($id === 'afsearchGrants') { + return 'grant'; + } + if (preg_match('#^(afform|afsearch)#i', $id)) { + return CRM_Utils_String::convertStringToSnakeCase(preg_replace('#^(afformtab|afsearchtab|afform|afsearch)#i', '', $id)); + } + return $id; + }; + + $setting = \Civi::settings()->get('contactlayout_default_tabs'); + if ($setting && is_array($setting)) { + foreach ($setting as $index => $tab) { + $setting[$index]['id'] = $convert($tab['id']); + } + \Civi::settings()->set('contactlayout_default_tabs', $setting); + } + if (CRM_Core_DAO::checkTableExists('civicrm_contact_layout')) { + // Can't use the api due to extension loading issues + $dao = CRM_Core_DAO::executeQuery('SELECT * FROM civicrm_contact_layout'); + while ($dao->fetch()) { + if (!empty($dao->tabs)) { + $tabs = CRM_Core_DAO::unSerializeField($dao->tabs, CRM_Core_DAO::SERIALIZE_JSON); + foreach ($tabs as $index => $tab) { + $tabs[$index]['id'] = $convert($tab['id']); + } + CRM_Core_DAO::executeQuery('UPDATE civicrm_contact_layout SET tabs = %1 WHERE id = %2', [ + 1 => [CRM_Core_DAO::serializeField($tabs, CRM_Core_DAO::SERIALIZE_JSON), 'String'], + 2 => [$dao->id, 'Integer'], + ]); + } + } + } + return TRUE; + } + } diff --git a/ext/afform/core/afform.php b/ext/afform/core/afform.php index ca1f7acdfa..a622a65554 100644 --- a/ext/afform/core/afform.php +++ b/ext/afform/core/afform.php @@ -181,8 +181,10 @@ function afform_civicrm_tabset($tabsetName, &$tabs, $context) { foreach ($afforms as $afform) { $summaryContactType = $afform['summary_contact_type'] ?? []; if (!$summaryContactType || !$contactTypes || array_intersect($summaryContactType, $contactTypes)) { + // Convention is to name the afform like "afformTabMyInfo" which gets the tab name "my_info" + $tabId = CRM_Utils_String::convertStringToSnakeCase(preg_replace('#^(afformtab|afsearchtab|afform|afsearch)#i', '', $afform['name'])); $tabs[] = [ - 'id' => $afform['name'], + 'id' => $tabId, 'title' => $afform['title'], 'weight' => $weight++, 'icon' => 'crm-i ' . ($afform['icon'] ?: 'fa-list-alt'), diff --git a/ext/civigrant/ang/afsearchGrants.aff.html b/ext/civigrant/ang/afsearchTabGrant.aff.html similarity index 100% rename from ext/civigrant/ang/afsearchGrants.aff.html rename to ext/civigrant/ang/afsearchTabGrant.aff.html diff --git a/ext/civigrant/ang/afsearchGrants.aff.json b/ext/civigrant/ang/afsearchTabGrant.aff.json similarity index 100% rename from ext/civigrant/ang/afsearchGrants.aff.json rename to ext/civigrant/ang/afsearchTabGrant.aff.json diff --git a/ext/civigrant/civigrant.php b/ext/civigrant/civigrant.php index 9f4ca39e70..d0e24ed5ac 100644 --- a/ext/civigrant/civigrant.php +++ b/ext/civigrant/civigrant.php @@ -39,7 +39,7 @@ function civigrant_civicrm_summaryActions(&$menu, $cid) { 'weight' => 26, 'ref' => 'new-grant', 'key' => 'grant', - 'tab' => 'afsearchGrants', + 'tab' => 'grant', 'href' => CRM_Utils_System::url('civicrm/contact/view/grant', 'reset=1&action=add&context=grant' ), -- 2.25.1