X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FImport%2FDataSource%2FSQL.php;h=78b20839f9be3f4bb87f7a2799c143d1076af521;hb=e6229d5aa0bca599fe85ca0a624d86ad14cfb8e1;hp=f3e6d3b4c03d5821e6bc58861fdc4d791696b0dc;hpb=1163561bc6514dc43e418ce81b65da1857eb0d1d;p=civicrm-core.git diff --git a/CRM/Import/DataSource/SQL.php b/CRM/Import/DataSource/SQL.php index f3e6d3b4c0..78b20839f9 100644 --- a/CRM/Import/DataSource/SQL.php +++ b/CRM/Import/DataSource/SQL.php @@ -74,35 +74,40 @@ class CRM_Import_DataSource_SQL extends CRM_Import_DataSource { } /** - * Process the form submission. - * - * @param array $params - * @param string $db - * @param \CRM_Core_Form $form + * Initialize the datasource, based on the submitted values stored in the user job. * * @throws \API_Exception * @throws \CRM_Core_Exception - * @throws \Civi\API\Exception\UnauthorizedException */ - public function postProcess(&$params, &$db, &$form) { - $importJob = new CRM_Contact_Import_ImportJob( - NULL, - $params['sqlQuery'], TRUE - ); + public function initialize(): void { + $table = CRM_Utils_SQL_TempTable::build()->setDurable(); + $tableName = $table->getName(); + $table->createWithQuery($this->getSubmittedValue('sqlQuery')); - $form->set('importTableName', $importJob->getTableName()); // Get the names of the fields to be imported. Any fields starting with an // underscore are considered to be internal to the import process) $columnsResult = CRM_Core_DAO::executeQuery( - 'SHOW FIELDS FROM ' . $importJob->getTableName() . " + 'SHOW FIELDS FROM ' . $tableName . " WHERE Field NOT LIKE '\_%'"); $columnNames = []; while ($columnsResult->fetch()) { - $columnNames[] = $columnsResult->Field; + if (strpos($columnsResult->Field, ' ') !== FALSE) { + // Remove spaces as the Database object does this + // $keys = str_replace(array(".", " "), "_", array_keys($array)); + // https://lab.civicrm.org/dev/core/-/issues/1337 + $usableColumnName = str_replace(' ', '_', $columnsResult->Field); + CRM_Core_DAO::executeQuery('ALTER TABLE ' . $tableName . ' CHANGE `' . $columnsResult->Field . '` ' . $usableColumnName . ' ' . $columnsResult->Type); + $columnNames[] = $usableColumnName; + } + else { + $columnNames[] = $columnsResult->Field; + } } + + $this->addTrackingFieldsToTable($tableName); $this->updateUserJobMetadata('DataSource', [ - 'table_name' => $importJob->getTableName(), + 'table_name' => $tableName, 'column_headers' => $columnNames, 'number_of_columns' => count($columnNames), ]);