}
/**
- * 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
- );
- $tableName = $importJob->getTableName();
+ public function initialize(): void {
+ $table = CRM_Utils_SQL_TempTable::build()->setDurable();
+ $tableName = $table->getName();
+ $table->createWithQuery($this->getSubmittedValue('sqlQuery'));
- $form->set('importTableName', $tableName);
// 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),
]);