* @return string
*/
protected function getTranslatedEntity(): string {
- return Civi\Api4\Utils\CoreUtil::getInfoItem($this::IMPORT_ENTITY, 'title');
+ return (string) Civi\Api4\Utils\CoreUtil::getInfoItem($this::IMPORT_ENTITY, 'title');
}
/**
* @return string
*/
protected function getTranslatedEntities(): string {
- return Civi\Api4\Utils\CoreUtil::getInfoItem($this::IMPORT_ENTITY, 'title_plural');
-
+ return (string) Civi\Api4\Utils\CoreUtil::getInfoItem($this::IMPORT_ENTITY, 'title_plural');
}
/**
*/
public function buildQuickForm() {
$config = CRM_Core_Config::singleton();
-
+ // When we switch to using the DataSource.tpl used by Contact we can remove this in
+ // favour of the one used by Contact - I was trying to consolidate
+ // first & got stuck on https://github.com/civicrm/civicrm-core/pull/23458
+ $this->add('hidden', 'hidden_dataSource', 'CRM_Import_DataSource_CSV');
$uploadFileSize = CRM_Utils_Number::formatUnitSize($config->maxFileSize . 'm', TRUE);
//Fetch uploadFileSize from php_ini when $config->maxFileSize is set to "no limit".
* Entity to set for paraser currently only for custom import
*/
protected function submitFileForMapping($parserClassName, $entity = NULL) {
- $this->controller->resetPage('MapField');
CRM_Core_Session::singleton()->set('dateTypes', $this->getSubmittedValue('dateFormats'));
+ $this->processDatasource();
$mapper = [];
$parser->setEntity($this->get($entity));
}
$parser->setMaxLinesToProcess(100);
+ $parser->setUserJobID($this->getUserJobID());
$parser->run(
$this->getSubmittedValue('uploadFile'),
$this->getSubmittedValue('fieldSeparator'),
// add all the necessary variables to the form
$parser->set($this);
+ $this->controller->resetPage('MapField');
}
/**
return ts('Upload Data');
}
+ /**
+ * Process the datasource submission - setting up the job and data source.
+ *
+ * @throws \API_Exception
+ * @throws \CRM_Core_Exception
+ */
+ protected function processDatasource(): void {
+ if (!$this->getUserJobID()) {
+ $this->createUserJob();
+ }
+ else {
+ $this->flushDataSource();
+ $this->updateUserJobMetadata('submitted_values', $this->getSubmittedValues());
+ }
+ $this->instantiateDataSource();
+ }
+
+ /**
+ * Instantiate the datasource.
+ *
+ * This gives the datasource a chance to do any table creation etc.
+ *
+ * @throws \API_Exception
+ * @throws \CRM_Core_Exception
+ */
+ private function instantiateDataSource(): void {
+ $this->getDataSourceObject()->initialize();
+ }
+
}