From 81c3812a8fa41b3644c07b27baabd90630108023 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Sun, 26 Jul 2015 21:14:26 -0400 Subject: [PATCH] CRM-11254 - Add base class for Import/dataSource --- CRM/Activity/Import/Form/DataSource.php | 113 ++----------- CRM/Activity/Import/Form/Summary.php | 3 +- CRM/Contact/Import/Form/Summary.php | 2 +- CRM/Contribute/Import/Form/DataSource.php | 145 ++-------------- CRM/Contribute/Import/Form/Summary.php | 2 +- CRM/Custom/Import/Form/DataSource.php | 147 ++-------------- CRM/Event/Import/Form/DataSource.php | 144 ++-------------- CRM/Event/Import/Form/Summary.php | 2 +- CRM/Import/Form/DataSource.php | 195 ++++++++++++++++++++++ CRM/Member/Import/Form/DataSource.php | 138 ++------------- CRM/Member/Import/Form/Summary.php | 1 - 11 files changed, 266 insertions(+), 626 deletions(-) create mode 100644 CRM/Import/Form/DataSource.php diff --git a/CRM/Activity/Import/Form/DataSource.php b/CRM/Activity/Import/Form/DataSource.php index 9ba87a83f2..ce30f7bfb4 100644 --- a/CRM/Activity/Import/Form/DataSource.php +++ b/CRM/Activity/Import/Form/DataSource.php @@ -36,19 +36,11 @@ /** * This class gets the name of the file to upload */ -class CRM_Activity_Import_Form_DataSource extends CRM_Core_Form { +class CRM_Activity_Import_Form_DataSource extends CRM_Import_Form_DataSource { - /** - * Set variables up before form is built. - * - * @return void - */ - public function preProcess() { - $session = CRM_Core_Session::singleton(); - $session->pushUserContext(CRM_Utils_System::url('civicrm/import/activity', 'reset=1')); - // check for post max size - CRM_Core_Config_Defaults::formatUnitSize(ini_get('post_max_size'), TRUE); - } + const PATH = 'civicrm/import/activity'; + + const IMPORT_ENTITY = 'Activity'; /** * Build the form object. @@ -56,24 +48,9 @@ class CRM_Activity_Import_Form_DataSource extends CRM_Core_Form { * @return void */ public function buildQuickForm() { - //Setting Upload File Size - $config = CRM_Core_Config::singleton(); - - $uploadFileSize = CRM_Core_Config_Defaults::formatUnitSize($config->maxFileSize . 'm', TRUE); - $uploadSize = round(($uploadFileSize / (1024 * 1024)), 2); - - $this->assign('uploadSize', $uploadSize); - $this->setMaxFileSize($uploadFileSize); - $this->add('File', 'uploadFile', ts('Import Data File'), 'size=30 maxlength=255', TRUE); - $this->addRule('uploadFile', ts('File size should be less than %1 MBytes (%2 bytes)', array( - 1 => $uploadSize, - 2 => $uploadFileSize, - )), 'maxfilesize', $uploadFileSize); - $this->addRule('uploadFile', ts('A valid file must be uploaded.'), 'uploadedfile'); - $this->addRule('uploadFile', ts('Input file must be in CSV format'), 'utf8File'); - - $this->addElement('checkbox', 'skipColumnHeader', ts('First row contains column headers')); + parent::buildQuickForm(); + // FIXME: This 'onDuplicate' form element is never used -- copy/paste error? $duplicateOptions = array(); $duplicateOptions[] = $this->createElement('radio', NULL, NULL, ts('Skip'), CRM_Import_Parser::DUPLICATE_SKIP @@ -88,40 +65,6 @@ class CRM_Activity_Import_Form_DataSource extends CRM_Core_Form { $this->addGroup($duplicateOptions, 'onDuplicate', ts('On duplicate entries') ); - - //get the saved mapping details - $mappingArray = CRM_Core_BAO_Mapping::getMappings(CRM_Core_OptionGroup::getValue('mapping_type', - 'Import Activity', - 'name' - )); - $this->assign('savedMapping', $mappingArray); - $this->add('select', 'savedMapping', ts('Mapping Option'), array('' => ts('- select -')) + $mappingArray); - - if ($loadeMapping = $this->get('loadedMapping')) { - $this->assign('loadedMapping', $loadeMapping); - $this->setDefaults(array('savedMapping' => $loadeMapping)); - } - - $this->setDefaults(array( - 'onDuplicate' => CRM_Import_Parser::DUPLICATE_SKIP, - )); - - //build date formats - CRM_Core_Form_Date::buildAllowedDateFormats($this); - - $this->addButtons(array( - array( - 'type' => 'upload', - 'name' => ts('Continue'), - 'spacing' => '          ', - 'isDefault' => TRUE, - ), - array( - 'type' => 'cancel', - 'name' => ts('Cancel'), - ), - ) - ); } /** @@ -130,45 +73,13 @@ class CRM_Activity_Import_Form_DataSource extends CRM_Core_Form { * @return void */ public function postProcess() { - $this->controller->resetPage('MapField'); - - $fileName = $this->controller->exportValue($this->_name, 'uploadFile'); - $skipColumnHeader = $this->controller->exportValue($this->_name, 'skipColumnHeader'); - $onDuplicate = $this->controller->exportValue($this->_name, 'onDuplicate'); - $dateFormats = $this->controller->exportValue($this->_name, 'dateFormats'); - $savedMapping = $this->controller->exportValue($this->_name, 'savedMapping'); - - $this->set('onDuplicate', $onDuplicate); - $this->set('dateFormats', $dateFormats); - $this->set('savedMapping', $savedMapping); - - $session = CRM_Core_Session::singleton(); - $session->set("dateTypes", $dateFormats); - - $config = CRM_Core_Config::singleton(); - $seperator = $config->fieldSeparator; - - $mapper = array(); - - $parser = new CRM_Activity_Import_Parser_Activity($mapper); - $parser->setMaxLinesToProcess(100); - $parser->run($fileName, $seperator, - $mapper, - $skipColumnHeader, - CRM_Import_Parser::MODE_MAPFIELD - ); - - // add all the necessary variables to the form - $parser->set($this); - } + $this->storeFormValues(array( + 'onDuplicate', + 'dateFormats', + 'savedMapping', + )); - /** - * Return a descriptive name for the page, used in wizard header - * - * @return string - */ - public function getTitle() { - return ts('Upload Data'); + $this->submitFileForMapping('CRM_Activity_Import_Parser_Activity'); } } diff --git a/CRM/Activity/Import/Form/Summary.php b/CRM/Activity/Import/Form/Summary.php index 919bfd1333..6bdb5da67b 100644 --- a/CRM/Activity/Import/Form/Summary.php +++ b/CRM/Activity/Import/Form/Summary.php @@ -44,9 +44,8 @@ class CRM_Activity_Import_Form_Summary extends CRM_Import_Form_Summary { * @return void */ public function preProcess() { - // set the error message path to display - $errorFile = $this->assign('errorFile', $this->get('errorFile')); + $this->assign('errorFile', $this->get('errorFile')); $totalRowCount = $this->get('totalRowCount'); $relatedCount = $this->get('relatedCount'); diff --git a/CRM/Contact/Import/Form/Summary.php b/CRM/Contact/Import/Form/Summary.php index 478abf0643..8f31bb5826 100644 --- a/CRM/Contact/Import/Form/Summary.php +++ b/CRM/Contact/Import/Form/Summary.php @@ -45,7 +45,7 @@ class CRM_Contact_Import_Form_Summary extends CRM_Import_Form_Summary { */ public function preProcess() { // set the error message path to display - $errorFile = $this->assign('errorFile', $this->get('errorFile')); + $this->assign('errorFile', $this->get('errorFile')); $totalRowCount = $this->get('totalRowCount'); $relatedCount = $this->get('relatedCount'); diff --git a/CRM/Contribute/Import/Form/DataSource.php b/CRM/Contribute/Import/Form/DataSource.php index 6368355d8b..14d1d8e30b 100644 --- a/CRM/Contribute/Import/Form/DataSource.php +++ b/CRM/Contribute/Import/Form/DataSource.php @@ -36,19 +36,11 @@ /** * This class gets the name of the file to upload */ -class CRM_Contribute_Import_Form_DataSource extends CRM_Core_Form { +class CRM_Contribute_Import_Form_DataSource extends CRM_Import_Form_DataSource { - /** - * Set variables up before form is built. - * - * @return void - */ - public function preProcess() { - $session = CRM_Core_Session::singleton(); - $session->pushUserContext(CRM_Utils_System::url('civicrm/contribute/import', 'reset=1')); - // check for post max size - CRM_Core_Config_Defaults::formatUnitSize(ini_get('post_max_size'), TRUE); - } + const PATH = 'civicrm/contribute/import'; + + const IMPORT_ENTITY = 'Contribution'; /** * Build the form object. @@ -56,24 +48,7 @@ class CRM_Contribute_Import_Form_DataSource extends CRM_Core_Form { * @return void */ public function buildQuickForm() { - //Setting Upload File Size - $config = CRM_Core_Config::singleton(); - - $uploadFileSize = CRM_Core_Config_Defaults::formatUnitSize($config->maxFileSize . 'm', TRUE); - $uploadSize = round(($uploadFileSize / (1024 * 1024)), 2); - - $this->assign('uploadSize', $uploadSize); - - $this->add('File', 'uploadFile', ts('Import Data File'), 'size=30 maxlength=255', TRUE); - $this->setMaxFileSize($uploadFileSize); - $this->addRule('uploadFile', ts('File size should be less than %1 MBytes (%2 bytes)', array( - 1 => $uploadSize, - 2 => $uploadFileSize, - )), 'maxfilesize', $uploadFileSize); - $this->addRule('uploadFile', ts('A valid file must be uploaded.'), 'uploadedfile'); - $this->addRule('uploadFile', ts('Input file must be in CSV format'), 'utf8File'); - - $this->addElement('checkbox', 'skipColumnHeader', ts('First row contains column headers')); + parent::buildQuickForm(); $duplicateOptions = array(); $duplicateOptions[] = $this->createElement('radio', @@ -86,68 +61,11 @@ class CRM_Contribute_Import_Form_DataSource extends CRM_Core_Form { ts('Import mode') ); - //get the saved mapping details - $mappingArray = CRM_Core_BAO_Mapping::getMappings(CRM_Core_OptionGroup::getValue('mapping_type', - 'Import Contribution', - 'name' - )); - $this->assign('savedMapping', $mappingArray); - $this->add('select', 'savedMapping', ts('Mapping Option'), array('' => ts('- select -')) + $mappingArray); - $this->addElement('submit', 'loadMapping', ts('Load Mapping'), NULL, array('onclick' => 'checkSelect()')); - - if ($loadeMapping = $this->get('loadedMapping')) { - $this->assign('loadedMapping', $loadeMapping); - $this->setDefaults(array('savedMapping' => $loadeMapping)); - } - - $this->setDefaults(array( - 'onDuplicate' => - CRM_Import_Parser::DUPLICATE_SKIP, - )); - - //contact types option - $contactOptions = array(); - if (CRM_Contact_BAO_ContactType::isActive('Individual')) { - $contactOptions[] = $this->createElement('radio', - NULL, NULL, ts('Individual'), CRM_Import_Parser::CONTACT_INDIVIDUAL - ); - } - if (CRM_Contact_BAO_ContactType::isActive('Household')) { - $contactOptions[] = $this->createElement('radio', - NULL, NULL, ts('Household'), CRM_Import_Parser::CONTACT_HOUSEHOLD - ); - } - if (CRM_Contact_BAO_ContactType::isActive('Organization')) { - $contactOptions[] = $this->createElement('radio', - NULL, NULL, ts('Organization'), CRM_Import_Parser::CONTACT_ORGANIZATION - ); - } - - $this->addGroup($contactOptions, 'contactType', - ts('Contact Type') - ); + $this->setDefaults(array('onDuplicate' => CRM_Import_Parser::DUPLICATE_SKIP)); - $this->setDefaults(array( - 'contactType' => - CRM_Import_Parser::CONTACT_INDIVIDUAL, - )); - - //build date formats - CRM_Core_Form_Date::buildAllowedDateFormats($this); + $this->addElement('submit', 'loadMapping', ts('Load Mapping'), NULL, array('onclick' => 'checkSelect()')); - $this->addButtons(array( - array( - 'type' => 'upload', - 'name' => ts('Continue'), - 'spacing' => '          ', - 'isDefault' => TRUE, - ), - array( - 'type' => 'cancel', - 'name' => ts('Cancel'), - ), - ) - ); + $this->addContactTypeSelector(); } /** @@ -156,47 +74,14 @@ class CRM_Contribute_Import_Form_DataSource extends CRM_Core_Form { * @return void */ public function postProcess() { - $this->controller->resetPage('MapField'); - - $fileName = $this->controller->exportValue($this->_name, 'uploadFile'); - $skipColumnHeader = $this->controller->exportValue($this->_name, 'skipColumnHeader'); - $onDuplicate = $this->controller->exportValue($this->_name, 'onDuplicate'); - $contactType = $this->controller->exportValue($this->_name, 'contactType'); - $dateFormats = $this->controller->exportValue($this->_name, 'dateFormats'); - $savedMapping = $this->controller->exportValue($this->_name, 'savedMapping'); - - $this->set('onDuplicate', $onDuplicate); - $this->set('contactType', $contactType); - $this->set('dateFormats', $dateFormats); - $this->set('savedMapping', $savedMapping); - - $session = CRM_Core_Session::singleton(); - $session->set("dateTypes", $dateFormats); - - $config = CRM_Core_Config::singleton(); - $seperator = $config->fieldSeparator; - - $mapper = array(); - - $parser = new CRM_Contribute_Import_Parser_Contribution($mapper); - $parser->setMaxLinesToProcess(100); - $parser->run($fileName, $seperator, - $mapper, - $skipColumnHeader, - CRM_Import_Parser::MODE_MAPFIELD, $contactType - ); - - // add all the necessary variables to the form - $parser->set($this); - } + $this->storeFormValues(array( + 'onDuplicate', + 'contactType', + 'dateFormats', + 'savedMapping', + )); - /** - * Return a descriptive name for the page, used in wizard header - * - * @return string - */ - public function getTitle() { - return ts('Upload Data'); + $this->submitFileForMapping('CRM_Contribute_Import_Parser_Contribution'); } } diff --git a/CRM/Contribute/Import/Form/Summary.php b/CRM/Contribute/Import/Form/Summary.php index b935b9daaa..9d6d76f2c5 100644 --- a/CRM/Contribute/Import/Form/Summary.php +++ b/CRM/Contribute/Import/Form/Summary.php @@ -45,7 +45,7 @@ class CRM_Contribute_Import_Form_Summary extends CRM_Import_Form_Summary { */ public function preProcess() { // set the error message path to display - $errorFile = $this->assign('errorFile', $this->get('errorFile')); + $this->assign('errorFile', $this->get('errorFile')); $totalRowCount = $this->get('totalRowCount'); $relatedCount = $this->get('relatedCount'); diff --git a/CRM/Custom/Import/Form/DataSource.php b/CRM/Custom/Import/Form/DataSource.php index 3b3d88b2ef..3458491a6b 100644 --- a/CRM/Custom/Import/Form/DataSource.php +++ b/CRM/Custom/Import/Form/DataSource.php @@ -36,27 +36,11 @@ /** * This class gets the name of the file to upload */ -class CRM_Custom_Import_Form_DataSource extends CRM_Core_Form { +class CRM_Custom_Import_Form_DataSource extends CRM_Import_Form_DataSource { - /** - * Set variables up before form is built. - * - * @return void - */ - public function preProcess() { - $session = CRM_Core_Session::singleton(); - $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this, FALSE); - if ($this->_id) { - $params = "reset=1&id={$this->_id}"; - } - else { - $params = "reset=1"; - } - $session->pushUserContext(CRM_Utils_System::url('civicrm/import/custom', $params)); + const PATH = 'civicrm/import/custom'; - // check for post max size - CRM_Core_Config_Defaults::formatUnitSize(ini_get('post_max_size'), TRUE); - } + const IMPORT_ENTITY = 'Multi value custom data'; /** * @return array @@ -83,82 +67,12 @@ class CRM_Custom_Import_Form_DataSource extends CRM_Core_Form { * @return void */ public function buildQuickForm() { + parent::buildQuickForm(); + $multipleCustomData = CRM_Core_BAO_CustomGroup::getMultipleFieldGroup(); $this->add('select', 'multipleCustomData', ts('Multi-value Custom Data'), array('' => ts('- select -')) + $multipleCustomData, TRUE); - //Setting Upload File Size - $config = CRM_Core_Config::singleton(); - - $uploadFileSize = CRM_Core_Config_Defaults::formatUnitSize($config->maxFileSize . 'm', TRUE); - $uploadSize = round(($uploadFileSize / (1024 * 1024)), 2); - - $this->assign('uploadSize', $uploadSize); - $this->add('File', 'uploadFile', ts('Import Data File'), 'size=30 maxlength=255', TRUE); - $this->setMaxFileSize($uploadFileSize); - $this->addRule('uploadFile', ts('File size should be less than %1 MBytes (%2 bytes)', array( - 1 => $uploadSize, - 2 => $uploadFileSize, - )), 'maxfilesize', $uploadFileSize); - $this->addRule('uploadFile', ts('A valid file must be uploaded.'), 'uploadedfile'); - $this->addRule('uploadFile', ts('Input file must be in CSV format'), 'utf8File'); - - $this->addElement('checkbox', 'skipColumnHeader', ts('First row contains column headers')); - - //get the saved mapping details - $mappingArray = CRM_Core_BAO_Mapping::getMappings(CRM_Core_OptionGroup::getValue('mapping_type', - 'Import Multi value custom data', - 'name' - )); - $this->assign('savedMapping', $mappingArray); - $this->add('select', 'savedMapping', ts('Mapping Option'), array('' => ts('- select -')) + $mappingArray); - - if ($loadeMapping = $this->get('loadedMapping')) { - $this->assign('loadedMapping', $loadeMapping); - $this->setDefaults(array('savedMapping' => $loadeMapping)); - } - - //contact types option - $contactOptions = array(); - if (CRM_Contact_BAO_ContactType::isActive('Individual')) { - $contactOptions[] = $this->createElement('radio', - NULL, NULL, ts('Individual'), CRM_Import_Parser::CONTACT_INDIVIDUAL - ); - } - if (CRM_Contact_BAO_ContactType::isActive('Household')) { - $contactOptions[] = $this->createElement('radio', - NULL, NULL, ts('Household'), CRM_Import_Parser::CONTACT_HOUSEHOLD - ); - } - if (CRM_Contact_BAO_ContactType::isActive('Organization')) { - $contactOptions[] = $this->createElement('radio', - NULL, NULL, ts('Organization'), CRM_Import_Parser::CONTACT_ORGANIZATION - ); - } - - $this->addGroup($contactOptions, 'contactType', - ts('Contact Type') - ); - - $this->setDefaults(array( - 'contactType' => CRM_Import_Parser::CONTACT_INDIVIDUAL, - )); - - //build date formats - CRM_Core_Form_Date::buildAllowedDateFormats($this); - - $this->addButtons(array( - array( - 'type' => 'upload', - 'name' => ts('Continue'), - 'spacing' => '          ', - 'isDefault' => TRUE, - ), - array( - 'type' => 'cancel', - 'name' => ts('Cancel'), - ), - ) - ); + $this->addContactTypeSelector(); } /** @@ -167,49 +81,14 @@ class CRM_Custom_Import_Form_DataSource extends CRM_Core_Form { * @return void */ public function postProcess() { - $this->controller->resetPage('MapField'); - - $fileName = $this->controller->exportValue($this->_name, 'uploadFile'); - $skipColumnHeader = $this->controller->exportValue($this->_name, 'skipColumnHeader'); - $contactType = $this->controller->exportValue($this->_name, 'contactType'); - $dateFormats = $this->controller->exportValue($this->_name, 'dateFormats'); - $savedMapping = $this->controller->exportValue($this->_name, 'savedMapping'); - $multipleCustomData = $this->controller->exportValue($this->_name, 'multipleCustomData'); - - $this->set('contactType', $contactType); - $this->set('dateFormats', $dateFormats); - $this->set('savedMapping', $savedMapping); - $this->set('multipleCustomData', $multipleCustomData); - - $session = CRM_Core_Session::singleton(); - $session->set("dateTypes", $dateFormats); - - $config = CRM_Core_Config::singleton(); - $seperator = $config->fieldSeparator; - - $mapper = array(); - - $parser = new CRM_Custom_Import_Parser_Api($mapper); - $parser->setEntity($multipleCustomData); - - $parser->setMaxLinesToProcess(100); - $parser->run($fileName, $seperator, - $mapper, - $skipColumnHeader, - CRM_Import_Parser::MODE_MAPFIELD, $contactType - ); - - // add all the necessary variables to the form - $parser->set($this); - } + $this->storeFormValues(array( + 'contactType', + 'dateFormats', + 'savedMapping', + 'multipleCustomData', + )); - /** - * Return a descriptive name for the page, used in wizard header - * - * @return string - */ - public function getTitle() { - return ts('Upload Data'); + $this->submitFileForMapping('CRM_Custom_Import_Parser_Api'); } } diff --git a/CRM/Event/Import/Form/DataSource.php b/CRM/Event/Import/Form/DataSource.php index c387bddfb0..5aa49d09f1 100644 --- a/CRM/Event/Import/Form/DataSource.php +++ b/CRM/Event/Import/Form/DataSource.php @@ -36,19 +36,11 @@ /** * This class gets the name of the file to upload */ -class CRM_Event_Import_Form_DataSource extends CRM_Core_Form { +class CRM_Event_Import_Form_DataSource extends CRM_Import_Form_DataSource { - /** - * Set variables up before form is built. - * - * @return void - */ - public function preProcess() { - $session = CRM_Core_Session::singleton(); - $session->pushUserContext(CRM_Utils_System::url('civicrm/event/import', 'reset=1')); - // check for post max size - CRM_Core_Config_Defaults::formatUnitSize(ini_get('post_max_size'), TRUE); - } + const PATH = 'civicrm/event/import'; + + const IMPORT_ENTITY = 'Participant'; /** * Build the form object. @@ -56,24 +48,7 @@ class CRM_Event_Import_Form_DataSource extends CRM_Core_Form { * @return void */ public function buildQuickForm() { - //Setting Upload File Size - $config = CRM_Core_Config::singleton(); - - $uploadFileSize = CRM_Core_Config_Defaults::formatUnitSize($config->maxFileSize . 'm', TRUE); - $uploadSize = round(($uploadFileSize / (1024 * 1024)), 2); - - $this->assign('uploadSize', $uploadSize); - - $this->add('File', 'uploadFile', ts('Import Data File'), 'size=30 maxlength=255', TRUE); - $this->setMaxFileSize($uploadFileSize); - $this->addRule('uploadFile', ts('File size should be less than %1 MBytes (%2 bytes)', array( - 1 => $uploadSize, - 2 => $uploadFileSize, - )), 'maxfilesize', $uploadFileSize); - $this->addRule('uploadFile', ts('A valid file must be uploaded.'), 'uploadedfile'); - $this->addRule('uploadFile', ts('Input file must be in CSV format'), 'utf8File'); - - $this->addElement('checkbox', 'skipColumnHeader', ts('First row contains column headers')); + parent::buildQuickForm(); $duplicateOptions = array(); $duplicateOptions[] = $this->createElement('radio', @@ -85,72 +60,13 @@ class CRM_Event_Import_Form_DataSource extends CRM_Core_Form { $duplicateOptions[] = $this->createElement('radio', NULL, NULL, ts('No Duplicate Checking'), CRM_Import_Parser::DUPLICATE_NOCHECK ); - // for contributions NOCHECK == SKIP - // $duplicateOptions[] = $this->createElement('radio', - // null, null, ts('No Duplicate Checking'), CRM_Import_Parser::DUPLICATE_NOCHECK); - $this->addGroup($duplicateOptions, 'onDuplicate', ts('On Duplicate Entries') ); - //get the saved mapping details - $mappingArray = CRM_Core_BAO_Mapping::getMappings(CRM_Core_OptionGroup::getValue('mapping_type', - 'Import Participant', - 'name' - )); - $this->assign('savedMapping', $mappingArray); - $this->add('select', 'savedMapping', ts('Mapping Option'), array('' => ts('- select -')) + $mappingArray); - - if ($loadeMapping = $this->get('loadedMapping')) { - $this->assign('loadedMapping', $loadeMapping); - $this->setDefaults(array('savedMapping' => $loadeMapping)); - } - - $this->setDefaults(array( - 'onDuplicate' => - CRM_Import_Parser::DUPLICATE_SKIP, - )); - - //contact types option - $contactOptions = array(); - if (CRM_Contact_BAO_ContactType::isActive('Individual')) { - $contactOptions[] = $this->createElement('radio', - NULL, NULL, ts('Individual'), CRM_Import_Parser::CONTACT_INDIVIDUAL - ); - } - if (CRM_Contact_BAO_ContactType::isActive('Household')) { - $contactOptions[] = $this->createElement('radio', - NULL, NULL, ts('Household'), CRM_Import_Parser::CONTACT_HOUSEHOLD - ); - } - if (CRM_Contact_BAO_ContactType::isActive('Organization')) { - $contactOptions[] = $this->createElement('radio', - NULL, NULL, ts('Organization'), CRM_Import_Parser::CONTACT_ORGANIZATION - ); - } - $this->addGroup($contactOptions, 'contactType', ts('Contact Type')); - - $this->setDefaults(array( - 'contactType' => CRM_Import_Parser::CONTACT_INDIVIDUAL, - ) - ); - - //build date formats - CRM_Core_Form_Date::buildAllowedDateFormats($this); + $this->setDefaults(array('onDuplicate' => CRM_Import_Parser::DUPLICATE_SKIP)); - $this->addButtons(array( - array( - 'type' => 'upload', - 'name' => ts('Continue'), - 'spacing' => '          ', - 'isDefault' => TRUE, - ), - array( - 'type' => 'cancel', - 'name' => ts('Cancel'), - ), - ) - ); + $this->addContactTypeSelector(); } /** @@ -159,46 +75,14 @@ class CRM_Event_Import_Form_DataSource extends CRM_Core_Form { * @return void */ public function postProcess() { - $this->controller->resetPage('MapField'); - - $fileName = $this->controller->exportValue($this->_name, 'uploadFile'); - $skipColumnHeader = $this->controller->exportValue($this->_name, 'skipColumnHeader'); - $onDuplicate = $this->controller->exportValue($this->_name, 'onDuplicate'); - $contactType = $this->controller->exportValue($this->_name, 'contactType'); - $dateFormats = $this->controller->exportValue($this->_name, 'dateFormats'); - $savedMapping = $this->controller->exportValue($this->_name, 'savedMapping'); - - $this->set('onDuplicate', $onDuplicate); - $this->set('contactType', $contactType); - $this->set('dateFormats', $dateFormats); - $this->set('savedMapping', $savedMapping); - - $session = CRM_Core_Session::singleton(); - $session->set("dateTypes", $dateFormats); - - $config = CRM_Core_Config::singleton(); - $seperator = $config->fieldSeparator; - - $mapper = array(); - $parser = new CRM_Event_Import_Parser_Participant($mapper); - $parser->setMaxLinesToProcess(100); - $parser->run($fileName, $seperator, - $mapper, - $skipColumnHeader, - CRM_Import_Parser::MODE_MAPFIELD, $contactType - ); - - // add all the necessary variables to the form - $parser->set($this); - } + $this->storeFormValues(array( + 'onDuplicate', + 'contactType', + 'dateFormats', + 'savedMapping', + )); - /** - * Return a descriptive name for the page, used in wizard header - * - * @return string - */ - public function getTitle() { - return ts('Upload Data'); + $this->submitFileForMapping('CRM_Event_Import_Parser_Participant'); } } diff --git a/CRM/Event/Import/Form/Summary.php b/CRM/Event/Import/Form/Summary.php index 8c49d34a39..d077ff0be8 100644 --- a/CRM/Event/Import/Form/Summary.php +++ b/CRM/Event/Import/Form/Summary.php @@ -45,7 +45,7 @@ class CRM_Event_Import_Form_Summary extends CRM_Import_Form_Summary { */ public function preProcess() { // set the error message path to display - $errorFile = $this->assign('errorFile', $this->get('errorFile')); + $this->assign('errorFile', $this->get('errorFile')); $totalRowCount = $this->get('totalRowCount'); $relatedCount = $this->get('relatedCount'); diff --git a/CRM/Import/Form/DataSource.php b/CRM/Import/Form/DataSource.php new file mode 100644 index 0000000000..d5f6a81806 --- /dev/null +++ b/CRM/Import/Form/DataSource.php @@ -0,0 +1,195 @@ +_id = CRM_Utils_Request::retrieve('id', 'Positive', $this, FALSE); + $params = "reset=1"; + if ($this->_id) { + $params .= "&id={$this->_id}"; + } + CRM_Core_Session::singleton()->pushUserContext(CRM_Utils_System::url(static::PATH, $params)); + + // check for post max size + CRM_Core_Config_Defaults::formatUnitSize(ini_get('post_max_size'), TRUE); + } + + /** + * Common form elements. + * + * @return void + */ + public function buildQuickForm() { + $config = CRM_Core_Config::singleton(); + + $uploadFileSize = CRM_Core_Config_Defaults::formatUnitSize($config->maxFileSize . 'm', TRUE); + $uploadSize = round(($uploadFileSize / (1024 * 1024)), 2); + + $this->assign('uploadSize', $uploadSize); + + $this->add('File', 'uploadFile', ts('Import Data File'), 'size=30 maxlength=255', TRUE); + $this->setMaxFileSize($uploadFileSize); + $this->addRule('uploadFile', ts('File size should be less than %1 MBytes (%2 bytes)', array( + 1 => $uploadSize, + 2 => $uploadFileSize, + )), 'maxfilesize', $uploadFileSize); + $this->addRule('uploadFile', ts('A valid file must be uploaded.'), 'uploadedfile'); + $this->addRule('uploadFile', ts('Input file must be in CSV format'), 'utf8File'); + + $this->addElement('checkbox', 'skipColumnHeader', ts('First row contains column headers')); + + //get the saved mapping details + $mappingArray = CRM_Core_BAO_Mapping::getMappings(CRM_Core_OptionGroup::getValue('mapping_type', + 'Import ' . static::IMPORT_ENTITY, + 'name' + )); + $this->assign('savedMapping', $mappingArray); + $this->add('select', 'savedMapping', ts('Mapping Option'), array('' => ts('- select -')) + $mappingArray); + + if ($loadedMapping = $this->get('loadedMapping')) { + $this->assign('loadedMapping', $loadedMapping); + $this->setDefaults(array('savedMapping' => $loadedMapping)); + } + + //build date formats + CRM_Core_Form_Date::buildAllowedDateFormats($this); + + $this->addButtons(array( + array( + 'type' => 'upload', + 'name' => ts('Continue'), + 'spacing' => '          ', + 'isDefault' => TRUE, + ), + array( + 'type' => 'cancel', + 'name' => ts('Cancel'), + ), + ) + ); + } + + /** + * A long-winded way to add one radio element to the form + */ + protected function addContactTypeSelector() { + //contact types option + $contactOptions = array(); + if (CRM_Contact_BAO_ContactType::isActive('Individual')) { + $contactOptions[] = $this->createElement('radio', + NULL, NULL, ts('Individual'), CRM_Import_Parser::CONTACT_INDIVIDUAL + ); + } + if (CRM_Contact_BAO_ContactType::isActive('Household')) { + $contactOptions[] = $this->createElement('radio', + NULL, NULL, ts('Household'), CRM_Import_Parser::CONTACT_HOUSEHOLD + ); + } + if (CRM_Contact_BAO_ContactType::isActive('Organization')) { + $contactOptions[] = $this->createElement('radio', + NULL, NULL, ts('Organization'), CRM_Import_Parser::CONTACT_ORGANIZATION + ); + } + + $this->addGroup($contactOptions, 'contactType', + ts('Contact Type') + ); + + $this->setDefaults(array( + 'contactType' => CRM_Import_Parser::CONTACT_INDIVIDUAL, + )); + } + + /** + * @param array $names + */ + protected function storeFormValues($names) { + foreach ($names as $name) { + $this->set($name, $this->controller->exportValue($this->_name, $name)); + } + } + + /** + * Common form postProcess + * + * @param string $parserClassName + */ + protected function submitFileForMapping($parserClassName) { + $this->controller->resetPage('MapField'); + + $fileName = $this->controller->exportValue($this->_name, 'uploadFile'); + $skipColumnHeader = $this->controller->exportValue($this->_name, 'skipColumnHeader'); + + $session = CRM_Core_Session::singleton(); + $session->set("dateTypes", $this->get('dateFormats')); + + $config = CRM_Core_Config::singleton(); + $seperator = $config->fieldSeparator; + + $mapper = array(); + + $parser = new $parserClassName($mapper); + $parser->setMaxLinesToProcess(100); + $parser->run($fileName, + $seperator, + $mapper, + $skipColumnHeader, + CRM_Import_Parser::MODE_MAPFIELD, + $this->get('contactType') + ); + + // add all the necessary variables to the form + $parser->set($this); + } + + /** + * Return a descriptive name for the page, used in wizard header + * + * @return string + */ + public function getTitle() { + return ts('Upload Data'); + } + +} diff --git a/CRM/Member/Import/Form/DataSource.php b/CRM/Member/Import/Form/DataSource.php index 9acf849845..27cf004179 100644 --- a/CRM/Member/Import/Form/DataSource.php +++ b/CRM/Member/Import/Form/DataSource.php @@ -36,19 +36,11 @@ /** * This class gets the name of the file to upload */ -class CRM_Member_Import_Form_DataSource extends CRM_Core_Form { +class CRM_Member_Import_Form_DataSource extends CRM_Import_Form_DataSource { - /** - * Set variables up before form is built. - * - * @return void - */ - public function preProcess() { - $session = CRM_Core_Session::singleton(); - $session->pushUserContext(CRM_Utils_System::url('civicrm/member/import', 'reset=1')); - // check for post max size - CRM_Core_Config_Defaults::formatUnitSize(ini_get('post_max_size'), TRUE); - } + const PATH = 'civicrm/member/import'; + + const IMPORT_ENTITY = 'Membership'; /** * Build the form object. @@ -56,24 +48,7 @@ class CRM_Member_Import_Form_DataSource extends CRM_Core_Form { * @return void */ public function buildQuickForm() { - //Setting Upload File Size - $config = CRM_Core_Config::singleton(); - - $uploadFileSize = CRM_Core_Config_Defaults::formatUnitSize($config->maxFileSize . 'm', TRUE); - $uploadSize = round(($uploadFileSize / (1024 * 1024)), 2); - - $this->assign('uploadSize', $uploadSize); - - $this->add('File', 'uploadFile', ts('Import Data File'), 'size=30 maxlength=255', TRUE); - $this->setMaxFileSize($uploadFileSize); - $this->addRule('uploadFile', ts('File size should be less than %1 MBytes (%2 bytes)', array( - 1 => $uploadSize, - 2 => $uploadFileSize, - )), 'maxfilesize', $uploadFileSize); - $this->addRule('uploadFile', ts('A valid file must be uploaded.'), 'uploadedfile'); - $this->addRule('uploadFile', ts('Input file must be in CSV format'), 'utf8File'); - - $this->addElement('checkbox', 'skipColumnHeader', ts('First row contains column headers')); + parent::buildQuickForm(); $duplicateOptions = array(); $duplicateOptions[] = $this->createElement('radio', @@ -90,61 +65,7 @@ class CRM_Member_Import_Form_DataSource extends CRM_Core_Form { 'onDuplicate' => CRM_Import_Parser::DUPLICATE_SKIP, )); - //get the saved mapping details - $mappingArray = CRM_Core_BAO_Mapping::getMappings(CRM_Core_OptionGroup::getValue('mapping_type', - 'Import Membership', - 'name' - )); - $this->assign('savedMapping', $mappingArray); - $this->add('select', 'savedMapping', ts('Mapping Option'), array('' => ts('- select -')) + $mappingArray); - - if ($loadeMapping = $this->get('loadedMapping')) { - $this->assign('loadedMapping', $loadeMapping); - $this->setDefaults(array('savedMapping' => $loadeMapping)); - } - - //contact types option - $contactOptions = array(); - if (CRM_Contact_BAO_ContactType::isActive('Individual')) { - $contactOptions[] = $this->createElement('radio', - NULL, NULL, ts('Individual'), CRM_Import_Parser::CONTACT_INDIVIDUAL - ); - } - if (CRM_Contact_BAO_ContactType::isActive('Household')) { - $contactOptions[] = $this->createElement('radio', - NULL, NULL, ts('Household'), CRM_Import_Parser::CONTACT_HOUSEHOLD - ); - } - if (CRM_Contact_BAO_ContactType::isActive('Organization')) { - $contactOptions[] = $this->createElement('radio', - NULL, NULL, ts('Organization'), CRM_Import_Parser::CONTACT_ORGANIZATION - ); - } - - $this->addGroup($contactOptions, 'contactType', - ts('Contact Type') - ); - - $this->setDefaults(array( - 'contactType' => CRM_Import_Parser::CONTACT_INDIVIDUAL, - )); - - //build date formats - CRM_Core_Form_Date::buildAllowedDateFormats($this); - - $this->addButtons(array( - array( - 'type' => 'upload', - 'name' => ts('Continue'), - 'spacing' => '          ', - 'isDefault' => TRUE, - ), - array( - 'type' => 'cancel', - 'name' => ts('Cancel'), - ), - ) - ); + $this->addContactTypeSelector(); } /** @@ -153,47 +74,14 @@ class CRM_Member_Import_Form_DataSource extends CRM_Core_Form { * @return void */ public function postProcess() { - $this->controller->resetPage('MapField'); - - $fileName = $this->controller->exportValue($this->_name, 'uploadFile'); - $skipColumnHeader = $this->controller->exportValue($this->_name, 'skipColumnHeader'); - $onDuplicate = $this->controller->exportValue($this->_name, 'onDuplicate'); - $contactType = $this->controller->exportValue($this->_name, 'contactType'); - $dateFormats = $this->controller->exportValue($this->_name, 'dateFormats'); - $savedMapping = $this->controller->exportValue($this->_name, 'savedMapping'); - - $this->set('onDuplicate', $onDuplicate); - $this->set('contactType', $contactType); - $this->set('dateFormats', $dateFormats); - $this->set('savedMapping', $savedMapping); - - $session = CRM_Core_Session::singleton(); - $session->set("dateTypes", $dateFormats); - - $config = CRM_Core_Config::singleton(); - $seperator = $config->fieldSeparator; - - $mapper = array(); - - $parser = new CRM_Member_Import_Parser_Membership($mapper); - $parser->setMaxLinesToProcess(100); - $parser->run($fileName, $seperator, - $mapper, - $skipColumnHeader, - CRM_Import_Parser::MODE_MAPFIELD, $contactType - ); - - // add all the necessary variables to the form - $parser->set($this); - } + $this->storeFormValues(array( + 'onDuplicate', + 'contactType', + 'dateFormats', + 'savedMapping', + )); - /** - * Return a descriptive name for the page, used in wizard header - * - * @return string - */ - public function getTitle() { - return ts('Upload Data'); + $this->submitFileForMapping('CRM_Member_Import_Parser_Membership'); } } diff --git a/CRM/Member/Import/Form/Summary.php b/CRM/Member/Import/Form/Summary.php index d68eff14e0..a00b38b5a2 100644 --- a/CRM/Member/Import/Form/Summary.php +++ b/CRM/Member/Import/Form/Summary.php @@ -44,7 +44,6 @@ class CRM_Member_Import_Form_Summary extends CRM_Import_Form_Summary { * @return void */ public function preProcess() { - // set the error message path to display $this->assign('errorFile', $this->get('errorFile')); -- 2.25.1