X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=ext%2Fsearch%2FCRM%2FSearch%2FUpgrader.php;h=670d3ca54594c147efd8b4e3a1109e4451326d27;hb=ad4611b56dc1bcba0d44d6d9eca44112d04c95f5;hp=9d314e49104420394738d90e38a50617aafd6027;hpb=b949f42f1cb7ce984c94aec4488cb544da45f8bd;p=civicrm-core.git diff --git a/ext/search/CRM/Search/Upgrader.php b/ext/search/CRM/Search/Upgrader.php index 9d314e4910..670d3ca545 100644 --- a/ext/search/CRM/Search/Upgrader.php +++ b/ext/search/CRM/Search/Upgrader.php @@ -31,6 +31,10 @@ 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 @@ -41,4 +45,43 @@ class CRM_Search_Upgrader extends CRM_Search_Upgrader_Base { 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; + } + }