X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=ext%2Fsearch%2FCRM%2FSearch%2FUpgrader.php;h=670d3ca54594c147efd8b4e3a1109e4451326d27;hb=ad4611b56dc1bcba0d44d6d9eca44112d04c95f5;hp=667460ecba06408145f47d036d1bf696c8112e26;hpb=052958e3f80894426868abf17e20ab871d5f8115;p=civicrm-core.git diff --git a/ext/search/CRM/Search/Upgrader.php b/ext/search/CRM/Search/Upgrader.php index 667460ecba..670d3ca545 100644 --- a/ext/search/CRM/Search/Upgrader.php +++ b/ext/search/CRM/Search/Upgrader.php @@ -14,7 +14,7 @@ class CRM_Search_Upgrader extends CRM_Search_Upgrader_Base { ->addValue('parent_id:name', 'Search') ->addValue('label', E::ts('Search Kit')) ->addValue('name', 'search_kit') - ->addValue('url', 'civicrm/search') + ->addValue('url', 'civicrm/admin/search') ->addValue('icon', 'crm-i fa-search-plus') ->addValue('has_separator', 2) ->addValue('weight', 99) @@ -31,4 +31,57 @@ class CRM_Search_Upgrader extends CRM_Search_Upgrader_Base { ->execute(); } + /** + * Upgrade 1000 - install schema + * @return bool + */ + public function upgrade_1000() { + $this->ctx->log->info('Applying update 1000 - install schema.'); + // For early, early adopters who installed the extension pre-beta + if (!CRM_Core_DAO::singleValueQuery("SHOW TABLES LIKE 'civicrm_search_display'")) { + $this->executeSqlFile('sql/auto_install.sql'); + } + CRM_Core_DAO::executeQuery("UPDATE civicrm_navigation SET url = 'civicrm/admin/search', name = 'search_kit' WHERE url = 'civicrm/search'"); + return TRUE; + } + + /** + * Upgrade 1001 - normalize search display column keys + * @return bool + */ + public function upgrade_1001() { + $this->ctx->log->info('Applying update 1001 - normalize search display columns.'); + $savedSearches = \Civi\Api4\SavedSearch::get(FALSE) + ->addWhere('api_params', 'IS NOT NULL') + ->addChain('displays', \Civi\Api4\SearchDisplay::get()->addWhere('saved_search_id', '=', '$id')) + ->execute(); + foreach ($savedSearches as $savedSearch) { + $newAliases = []; + foreach ($savedSearch['api_params']['select'] ?? [] as $i => $select) { + if (strstr($select, '(') && !strstr($select, ' AS ')) { + $alias = CRM_Utils_String::munge(str_replace(')', '', $select), '_', 256); + $newAliases[$select] = $alias; + $savedSearch['api_params']['select'][$i] = $select . ' AS ' . $alias; + } + } + if ($newAliases) { + \Civi\Api4\SavedSearch::update(FALSE) + ->setValues(array_diff_key($savedSearch, ['displays' => 0])) + ->execute(); + } + foreach ($savedSearch['displays'] ?? [] as $display) { + foreach ($display['settings']['columns'] ?? [] as $c => $column) { + $key = $newAliases[$column['expr']] ?? $column['expr']; + unset($display['settings']['columns'][$c]['expr']); + $display['settings']['columns'][$c]['key'] = explode(' AS ', $key)[1] ?? $key; + $display['settings']['columns'][$c]['type'] = 'field'; + } + \Civi\Api4\SearchDisplay::update(FALSE) + ->setValues($display) + ->execute(); + } + } + return TRUE; + } + }