*/
protected $masterAddressID;
+ protected $locationTypes = [];
+
public function tearDown() {
$this->quickCleanup([
'civicrm_contact',
'civicrm_case_activity',
]);
$this->quickCleanUpFinancialEntities();
+ if (!empty($this->locationTypes)) {
+ $this->callAPISuccess('LocationType', 'delete', ['id' => $this->locationTypes['Whare Kai']['id']]);
+ $this->callAPISuccess('LocationType', 'create', ['id' => $this->locationTypes['Main']['id'], 'name' => 'Main']);
+ }
parent::tearDown();
}
array('Contribution', 'trxn_id'),
);
- list($tableName, $sqlColumns) = CRM_Export_BAO_Export::exportComponents(
+ list($tableName) = CRM_Export_BAO_Export::exportComponents(
TRUE,
$this->contributionIDs,
array(),
['Individual', 'city', ''],
['Individual', 'state_province', ''],
];
- list($tableName) = CRM_Export_BAO_Export::exportComponents(
+ list($tableName, $sqlColumns, $headerRows) = CRM_Export_BAO_Export::exportComponents(
FALSE,
$this->contactIDs,
[],
$this->assertEquals($householdID, $dao->civicrm_primary_id);
}
+ $this->assertEquals([
+ 0 => 'City',
+ 1 => 'State',
+ 2 => 'Household ID',
+ ], $headerRows);
+ $this->assertEquals(
+ [
+ 'city' => 'city varchar(64)',
+ 'state_province' => 'state_province varchar(64)',
+ 'civicrm_primary_id' => 'civicrm_primary_id varchar(16)',
+ ], $sqlColumns);
}
/**
public function testExportIMData() {
// Use default providers.
$providers = ['AIM', 'GTalk', 'Jabber', 'MSN', 'Skype', 'Yahoo'];
- $locationTypes = ['Billing', 'Home', 'Main', 'Other'];
+ // Main sure labels are not all anglo chars.
+ $this->diversifyLocationTypes();
+
+ $locationTypes = ['Billing' => 'Billing', 'Home' => 'Home', 'Main' => 'Méin', 'Other' => 'Other', 'Whare Kai' => 'Whare Kai'];
$this->contactIDs[] = $this->individualCreate();
$this->contactIDs[] = $this->individualCreate();
$this->contactIDs[] = $this->organizationCreate();
foreach ($this->contactIDs as $contactID) {
foreach ($providers as $provider) {
- foreach ($locationTypes as $locationType) {
+ foreach ($locationTypes as $locationName => $locationLabel) {
$this->callAPISuccess('IM', 'create', [
'contact_id' => $contactID,
- 'location_type_id' => $locationType,
+ 'location_type_id' => $locationName,
'provider_id' => $provider,
- 'name' => $locationType . $provider . $contactID,
+ 'name' => $locationName . $provider . $contactID,
]);
}
}
$fields = [['Individual', 'contact_id']];
// ' ' denotes primary location type.
- foreach (array_merge($locationTypes, [' ']) as $locationType) {
+ foreach (array_keys(array_merge($locationTypes, [' ' => ['Primary']])) as $locationType) {
$fields[] = [
'Individual',
'im_provider',
}
}
}
- list($tableName) = $this->doExport($fields, $this->contactIDs[0]);
+ list($tableName, $sqlColumns) = $this->doExport($fields, $this->contactIDs[0]);
$dao = CRM_Core_DAO::executeQuery('SELECT * FROM ' . $tableName);
while ($dao->fetch()) {
}
}
- // early return for now until we solve a leakage issue.
- return;
-
$this->assertEquals([
'billing_im_provider' => 'billing_im_provider text',
'billing_im_screen_name' => 'billing_im_screen_name text',
'5_a_b_other_im_screen_name_skype' => '5_a_b_other_im_screen_name_skype text',
'5_a_b_other_im_screen_name_yahoo' => '5_a_b_other_im_screen_name_yahoo text',
'5_a_b_im' => '5_a_b_im text',
+ 'whare_kai_im_provider' => 'whare_kai_im_provider text',
+ 'whare_kai_im_screen_name' => 'whare_kai_im_screen_name text',
+ 'whare_kai_im_screen_name_jabber' => 'whare_kai_im_screen_name_jabber text',
+ 'whare_kai_im_screen_name_skype' => 'whare_kai_im_screen_name_skype text',
+ 'whare_kai_im_screen_name_yahoo' => 'whare_kai_im_screen_name_yahoo text',
+ '2_a_b_whare_kai_im_screen_name' => '2_a_b_whare_kai_im_screen_name text',
+ '2_a_b_whare_kai_im_screen_name_jabber' => '2_a_b_whare_kai_im_screen_name_jabber text',
+ '2_a_b_whare_kai_im_screen_name_skype' => '2_a_b_whare_kai_im_screen_name_skype text',
+ '2_a_b_whare_kai_im_screen_name_yahoo' => '2_a_b_whare_kai_im_screen_name_yahoo text',
+ '8_a_b_whare_kai_im_screen_name' => '8_a_b_whare_kai_im_screen_name text',
+ '8_a_b_whare_kai_im_screen_name_jabber' => '8_a_b_whare_kai_im_screen_name_jabber text',
+ '8_a_b_whare_kai_im_screen_name_skype' => '8_a_b_whare_kai_im_screen_name_skype text',
+ '8_a_b_whare_kai_im_screen_name_yahoo' => '8_a_b_whare_kai_im_screen_name_yahoo text',
+ '5_a_b_whare_kai_im_screen_name' => '5_a_b_whare_kai_im_screen_name text',
+ '5_a_b_whare_kai_im_screen_name_jabber' => '5_a_b_whare_kai_im_screen_name_jabber text',
+ '5_a_b_whare_kai_im_screen_name_skype' => '5_a_b_whare_kai_im_screen_name_skype text',
+ '5_a_b_whare_kai_im_screen_name_yahoo' => '5_a_b_whare_kai_im_screen_name_yahoo text',
], $sqlColumns);
}
+ /**
+ * Export City against multiple location types.
+ */
+ public function testExportAddressData() {
+ $this->diversifyLocationTypes();
+
+ $locationTypes = ['Billing' => 'Billing', 'Home' => 'Home', 'Main' => 'Méin', 'Other' => 'Other', 'Whare Kai' => 'Whare Kai'];
+
+ $this->contactIDs[] = $this->individualCreate();
+ $this->contactIDs[] = $this->individualCreate();
+ $this->contactIDs[] = $this->householdCreate();
+ $this->contactIDs[] = $this->organizationCreate();
+ $fields = [['Individual', 'contact_id']];
+ foreach ($this->contactIDs as $contactID) {
+ foreach ($locationTypes as $locationName => $locationLabel) {
+ $this->callAPISuccess('Address', 'create', [
+ 'contact_id' => $contactID,
+ 'location_type_id' => $locationName,
+ 'street_address' => $locationLabel . $contactID . 'street_address',
+ 'city' => $locationLabel . $contactID . 'city',
+ 'postal_code' => $locationLabel . $contactID . 'postal_code',
+ ]);
+ $fields[] = ['Individual', 'city', CRM_Core_PseudoConstant::getKey('CRM_Core_BAO_Address', 'location_type_id', $locationName)];
+ $fields[] = ['Individual', 'street_address', CRM_Core_PseudoConstant::getKey('CRM_Core_BAO_Address', 'location_type_id', $locationName)];
+ $fields[] = ['Individual', 'postal_code', CRM_Core_PseudoConstant::getKey('CRM_Core_BAO_Address', 'location_type_id', $locationName)];
+ }
+ }
+
+ $relationships = [
+ $this->contactIDs[1] => ['label' => 'Spouse of'],
+ $this->contactIDs[2] => ['label' => 'Household Member of'],
+ $this->contactIDs[3] => ['label' => 'Employee of']
+ ];
+
+ foreach ($relationships as $contactID => $relationshipType) {
+ $relationshipTypeID = $this->callAPISuccess('RelationshipType', 'getvalue', ['label_a_b' => $relationshipType['label'], 'return' => 'id']);
+ $result = $this->callAPISuccess('Relationship', 'create', [
+ 'contact_id_a' => $this->contactIDs[0],
+ 'relationship_type_id' => $relationshipTypeID,
+ 'contact_id_b' => $contactID
+ ]);
+ $relationships[$contactID]['id'] = $result['id'];
+ $relationships[$contactID]['relationship_type_id'] = $relationshipTypeID;
+ }
+
+ // ' ' denotes primary location type.
+ foreach (array_keys(array_merge($locationTypes, [' ' => ['Primary']])) as $locationType) {
+ foreach ($relationships as $contactID => $relationship) {
+ $fields[] = [
+ 'Individual',
+ $relationship['relationship_type_id'] . '_a_b',
+ 'city',
+ CRM_Core_PseudoConstant::getKey('CRM_Core_BAO_IM', 'location_type_id', $locationType),
+ ];
+ }
+ }
+ list($tableName, $sqlColumns) = $this->doExport($fields, $this->contactIDs[0]);
+
+ $dao = CRM_Core_DAO::executeQuery('SELECT * FROM ' . $tableName);
+ while ($dao->fetch()) {
+ $id = $dao->contact_id;
+ $this->assertEquals('Méin' . $id . 'city', $dao->main_city);
+ $this->assertEquals('Billing' . $id . 'street_address', $dao->billing_street_address);
+ $this->assertEquals('Whare Kai' . $id . 'postal_code', $dao->whare_kai_postal_code);
+ foreach ($relationships as $relatedContactID => $relationship) {
+ $relationshipString = $field = $relationship['relationship_type_id'] . '_a_b';
+ $field = $relationshipString . '_main_city';
+ $this->assertEquals('Méin' . $relatedContactID . 'city', $dao->$field);
+ }
+ }
+
+ $this->assertEquals([
+ 'contact_id' => 'contact_id varchar(255)',
+ 'billing_city' => 'billing_city text',
+ 'billing_street_address' => 'billing_street_address text',
+ 'billing_postal_code' => 'billing_postal_code text',
+ 'home_city' => 'home_city text',
+ 'home_street_address' => 'home_street_address text',
+ 'home_postal_code' => 'home_postal_code text',
+ 'main_city' => 'main_city text',
+ 'main_street_address' => 'main_street_address text',
+ 'main_postal_code' => 'main_postal_code text',
+ 'other_city' => 'other_city text',
+ 'other_street_address' => 'other_street_address text',
+ 'other_postal_code' => 'other_postal_code text',
+ 'whare_kai_city' => 'whare_kai_city text',
+ 'whare_kai_street_address' => 'whare_kai_street_address text',
+ 'whare_kai_postal_code' => 'whare_kai_postal_code text',
+ '2_a_b_billing_city' => '2_a_b_billing_city text',
+ '2_a_b_home_city' => '2_a_b_home_city text',
+ '2_a_b_main_city' => '2_a_b_main_city text',
+ '2_a_b_other_city' => '2_a_b_other_city text',
+ '2_a_b_whare_kai_city' => '2_a_b_whare_kai_city text',
+ '2_a_b_city' => '2_a_b_city text',
+ '8_a_b_billing_city' => '8_a_b_billing_city text',
+ '8_a_b_home_city' => '8_a_b_home_city text',
+ '8_a_b_main_city' => '8_a_b_main_city text',
+ '8_a_b_other_city' => '8_a_b_other_city text',
+ '8_a_b_whare_kai_city' => '8_a_b_whare_kai_city text',
+ '8_a_b_city' => '8_a_b_city text',
+ '5_a_b_billing_city' => '5_a_b_billing_city text',
+ '5_a_b_home_city' => '5_a_b_home_city text',
+ '5_a_b_main_city' => '5_a_b_main_city text',
+ '5_a_b_other_city' => '5_a_b_other_city text',
+ '5_a_b_whare_kai_city' => '5_a_b_whare_kai_city text',
+ '5_a_b_city' => '5_a_b_city text',
+ ], $sqlColumns);
+ }
+
/**
* Test master_address_id field.
*/
));
//export and merge contacts with same address
- list($tableName, $sqlColumns) = CRM_Export_BAO_Export::exportComponents(
+ list($tableName) = CRM_Export_BAO_Export::exportComponents(
TRUE,
array($contactA['id'], $contactB['id']),
array(),
}
/**
+ * Do a CiviCRM export.
+ *
* @param $selectedFields
+ * @param int $id
+ *
+ * @param int $exportMode
+ *
* @return array
*/
- protected function doExport($selectedFields, $id) {
+ protected function doExport($selectedFields, $id, $exportMode = CRM_Export_Form_Select::CONTACT_EXPORT) {
list($tableName, $sqlColumns) = CRM_Export_BAO_Export::exportComponents(
TRUE,
array($id),
NULL,
$selectedFields,
NULL,
- CRM_Export_Form_Select::CONTACT_EXPORT,
+ $exportMode,
"contact_a.id IN ({$id})",
NULL,
FALSE,
/**
* Get basic return properties.
*
- * @bool $isContactMode
+ * @param bool $isContactMode
* Are we in contact mode or not
*
* @return array
/**
* Test the column definition when 'all' fields defined.
*
- * @param $exportMode
- * @param $expected
+ * @param int $exportMode
+ * @param array $expected
+ * @param array $expectedHeaders
*
* @dataProvider getSqlColumnsOutput
*/
- public function testGetSQLColumns($exportMode, $expected) {
+ public function testGetSQLColumnsAndHeaders($exportMode, $expected, $expectedHeaders) {
$this->ensureComponentIsEnabled($exportMode);
// We need some data so that we can get to the end of the export
// function. Hopefully one day that won't be required to get metadata info out.
)
);
$this->assertEquals($expected, $result[1]);
+ $this->assertEquals($expectedHeaders, $result[2]);
+ }
+
+ /**
+ * Test exported with fields to output specified.
+ *
+ * @dataProvider getAllSpecifiableReturnFields
+ *
+ * @param int $exportMode
+ * @param array $selectedFields
+ * @param array $expected
+ */
+ public function testExportSpecifyFields($exportMode, $selectedFields, $expected) {
+ $this->ensureComponentIsEnabled($exportMode);
+ $this->setUpContributionExportData();
+ list($tableName, $sqlColumns) = $this->doExport($selectedFields, $this->contactIDs[1], $exportMode);
+ $this->assertEquals($expected, $sqlColumns);
+ }
+
+ /**
+ * Test export fields when no payment fields to be exported.
+ */
+ public function textExportParticipantSpecifyFieldsNoPayment() {
+ $selectedFields = $this->getAllSpecifiableParticipantReturnFields();
+ foreach ($selectedFields as $index => $field) {
+ if (substr($field[1], 0, 22) === 'componentPaymentField_') {
+ unset ($selectedFields[$index]);
+ }
+ }
+
+ $expected = $this->getAllSpecifiableParticipantReturnFields();
+ foreach ($expected as $index => $field) {
+ if (substr($index, 0, 22) === 'componentPaymentField_') {
+ unset ($expected[$index]);
+ }
+ }
+
+ list($tableName, $sqlColumns) = $this->doExport($selectedFields, $this->contactIDs[1], CRM_Export_Form_Select::EVENT_EXPORT);
+ $this->assertEquals($expected, $sqlColumns);
+ }
+ /**
+ * Get all return fields (@todo - still being built up.
+ *
+ * @return array
+ */
+ public function getAllSpecifiableReturnFields() {
+ return [
+ [
+ CRM_Export_Form_Select::EVENT_EXPORT,
+ $this->getAllSpecifiableParticipantReturnFields(),
+ $this->getAllSpecifiableParticipantReturnColumns(),
+ ],
+ ];
+ }
+
+ /**
+ * Get expected return column output for participant mode return all columns.
+ *
+ * @return array
+ */
+ public function getAllSpecifiableParticipantReturnColumns() {
+ return [
+ 'participant_campaign_id' => 'participant_campaign_id varchar(128)',
+ 'participant_contact_id' => 'participant_contact_id varchar(16)',
+ 'componentpaymentfield_contribution_status' => 'componentpaymentfield_contribution_status text',
+ 'currency' => 'currency varchar(3)',
+ 'componentpaymentfield_received_date' => 'componentpaymentfield_received_date text',
+ 'default_role_id' => 'default_role_id varchar(16)',
+ 'participant_discount_name' => 'participant_discount_name varchar(16)',
+ 'event_id' => 'event_id varchar(16)',
+ 'event_end_date' => 'event_end_date varchar(32)',
+ 'event_start_date' => 'event_start_date varchar(32)',
+ 'template_title' => 'template_title varchar(255)',
+ 'event_title' => 'event_title varchar(255)',
+ 'participant_fee_amount' => 'participant_fee_amount varchar(32)',
+ 'participant_fee_currency' => 'participant_fee_currency varchar(3)',
+ 'fee_label' => 'fee_label varchar(255)',
+ 'participant_fee_level' => 'participant_fee_level longtext',
+ 'participant_is_pay_later' => 'participant_is_pay_later varchar(16)',
+ 'participant_id' => 'participant_id varchar(16)',
+ 'participant_note' => 'participant_note text',
+ 'participant_role_id' => 'participant_role_id varchar(128)',
+ 'participant_role' => 'participant_role varchar(255)',
+ 'participant_source' => 'participant_source varchar(128)',
+ 'participant_status_id' => 'participant_status_id varchar(16)',
+ 'participant_status' => 'participant_status varchar(255)',
+ 'participant_register_date' => 'participant_register_date varchar(32)',
+ 'participant_registered_by_id' => 'participant_registered_by_id varchar(16)',
+ 'participant_is_test' => 'participant_is_test varchar(16)',
+ 'componentpaymentfield_total_amount' => 'componentpaymentfield_total_amount text',
+ 'componentpaymentfield_transaction_id' => 'componentpaymentfield_transaction_id varchar(255)',
+ 'transferred_to_contact_id' => 'transferred_to_contact_id varchar(16)',
+ ];
+ }
+
+ /**
+ * @return array
+ */
+ public function getAllSpecifiableParticipantReturnFields() {
+ return [
+ 0 =>
+ [
+ 0 => 'Participant',
+ 1 => '',
+ ],
+ 1 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_campaign_id',
+ ],
+ 2 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_contact_id',
+ ],
+ 3 =>
+ [
+ 0 => 'Participant',
+ 1 => 'componentPaymentField_contribution_status',
+ ],
+ 4 =>
+ [
+ 0 => 'Participant',
+ 1 => 'currency',
+ ],
+ 5 =>
+ [
+ 0 => 'Participant',
+ 1 => 'componentPaymentField_received_date',
+ ],
+ 6 =>
+ [
+ 0 => 'Participant',
+ 1 => 'default_role_id',
+ ],
+ 7 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_discount_name',
+ ],
+ 8 =>
+ [
+ 0 => 'Participant',
+ 1 => 'event_id',
+ ],
+ 9 =>
+ [
+ 0 => 'Participant',
+ 1 => 'event_end_date',
+ ],
+ 10 =>
+ [
+ 0 => 'Participant',
+ 1 => 'event_start_date',
+ ],
+ 11 =>
+ [
+ 0 => 'Participant',
+ 1 => 'template_title',
+ ],
+ 12 =>
+ [
+ 0 => 'Participant',
+ 1 => 'event_title',
+ ],
+ 13 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_fee_amount',
+ ],
+ 14 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_fee_currency',
+ ],
+ 15 =>
+ [
+ 0 => 'Participant',
+ 1 => 'fee_label',
+ ],
+ 16 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_fee_level',
+ ],
+ 17 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_is_pay_later',
+ ],
+ 18 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_id',
+ ],
+ 19 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_note',
+ ],
+ 20 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_role_id',
+ ],
+ 21 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_role',
+ ],
+ 22 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_source',
+ ],
+ 23 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_status_id',
+ ],
+ 24 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_status',
+ ],
+ 25 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_status',
+ ],
+ 26 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_register_date',
+ ],
+ 27 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_registered_by_id',
+ ],
+ 28 =>
+ [
+ 0 => 'Participant',
+ 1 => 'participant_is_test',
+ ],
+ 29 =>
+ [
+ 0 => 'Participant',
+ 1 => 'componentPaymentField_total_amount',
+ ],
+ 30 =>
+ [
+ 0 => 'Participant',
+ 1 => 'componentPaymentField_transaction_id',
+ ],
+ 31 =>
+ [
+ 0 => 'Participant',
+ 1 => 'transferred_to_contact_id',
+ ],
+ ];
}
/**
[
'anything that will then be defaulting ton contact',
$this->getBasicSqlColumnDefinition(TRUE),
+ $this->getBasicHeaderDefinition(TRUE),
],
[
CRM_Export_Form_Select::ACTIVITY_EXPORT,
array_merge($this->getBasicSqlColumnDefinition(FALSE), $this->getActivitySqlColumns()),
+ array_merge($this->getBasicHeaderDefinition(FALSE), $this->getActivityHeaderDefinition()),
],
[
CRM_Export_Form_Select::CASE_EXPORT,
array_merge($this->getBasicSqlColumnDefinition(FALSE), $this->getCaseSqlColumns()),
+ array_merge($this->getBasicHeaderDefinition(FALSE), $this->getCaseHeaderDefinition()),
],
[
CRM_Export_Form_Select::CONTRIBUTE_EXPORT,
array_merge($this->getBasicSqlColumnDefinition(FALSE), $this->getContributionSqlColumns()),
+ array_merge($this->getBasicHeaderDefinition(FALSE), $this->getContributeHeaderDefinition()),
],
[
CRM_Export_Form_Select::EVENT_EXPORT,
array_merge($this->getBasicSqlColumnDefinition(FALSE), $this->getParticipantSqlColumns()),
+ array_merge($this->getBasicHeaderDefinition(FALSE), $this->getParticipantHeaderDefinition()),
],
[
CRM_Export_Form_Select::MEMBER_EXPORT,
array_merge($this->getBasicSqlColumnDefinition(FALSE), $this->getMembershipSqlColumns()),
+ array_merge($this->getBasicHeaderDefinition(FALSE), $this->getMemberHeaderDefinition()),
],
[
CRM_Export_Form_Select::PLEDGE_EXPORT,
array_merge($this->getBasicSqlColumnDefinition(FALSE), $this->getPledgeSqlColumns()),
+ array_merge($this->getBasicHeaderDefinition(FALSE), $this->getPledgeHeaderDefinition()),
],
];
}
+ /**
+ * Get the header definition for exports.
+ *
+ * @param bool $isContactExport
+ *
+ * @return array
+ */
+ protected function getBasicHeaderDefinition($isContactExport) {
+ $headers = [
+ 0 => 'Contact ID',
+ 1 => 'Contact Type',
+ 2 => 'Contact Subtype',
+ 3 => 'Do Not Email',
+ 4 => 'Do Not Phone',
+ 5 => 'Do Not Mail',
+ 6 => 'Do Not Sms',
+ 7 => 'Do Not Trade',
+ 8 => 'No Bulk Emails (User Opt Out)',
+ 9 => 'Legal Identifier',
+ 10 => 'External Identifier',
+ 11 => 'Sort Name',
+ 12 => 'Display Name',
+ 13 => 'Nickname',
+ 14 => 'Legal Name',
+ 15 => 'Image Url',
+ 16 => 'Preferred Communication Method',
+ 17 => 'Preferred Language',
+ 18 => 'Preferred Mail Format',
+ 19 => 'Contact Hash',
+ 20 => 'Contact Source',
+ 21 => 'First Name',
+ 22 => 'Middle Name',
+ 23 => 'Last Name',
+ 24 => 'Individual Prefix',
+ 25 => 'Individual Suffix',
+ 26 => 'Formal Title',
+ 27 => 'Communication Style',
+ 28 => 'Email Greeting ID',
+ 29 => 'Postal Greeting ID',
+ 30 => 'Addressee ID',
+ 31 => 'Job Title',
+ 32 => 'Gender',
+ 33 => 'Birth Date',
+ 34 => 'Deceased',
+ 35 => 'Deceased Date',
+ 36 => 'Household Name',
+ 37 => 'Organization Name',
+ 38 => 'Sic Code',
+ 39 => 'Unique ID (OpenID)',
+ 40 => 'Current Employer ID',
+ 41 => 'Contact is in Trash',
+ 42 => 'Created Date',
+ 43 => 'Modified Date',
+ 44 => 'Addressee',
+ 45 => 'Email Greeting',
+ 46 => 'Postal Greeting',
+ 47 => 'Current Employer',
+ 48 => 'Location Type',
+ 49 => 'Street Address',
+ 50 => 'Street Number',
+ 51 => 'Street Number Suffix',
+ 52 => 'Street Name',
+ 53 => 'Street Unit',
+ 54 => 'Supplemental Address 1',
+ 55 => 'Supplemental Address 2',
+ 56 => 'Supplemental Address 3',
+ 57 => 'City',
+ 58 => 'Postal Code Suffix',
+ 59 => 'Postal Code',
+ 60 => 'Latitude',
+ 61 => 'Longitude',
+ 62 => 'Address Name',
+ 63 => 'Master Address Belongs To',
+ 64 => 'County',
+ 65 => 'State',
+ 66 => 'Country',
+ 67 => 'Phone',
+ 68 => 'Phone Extension',
+ 69 => 'Phone Type',
+ 70 => 'Email',
+ 71 => 'On Hold',
+ 72 => 'Use for Bulk Mail',
+ 73 => 'Signature Text',
+ 74 => 'Signature Html',
+ 75 => 'IM Provider',
+ 76 => 'IM Screen Name',
+ 77 => 'OpenID',
+ 78 => 'World Region',
+ 79 => 'Website',
+ 80 => 'Group(s)',
+ 81 => 'Tag(s)',
+ 82 => 'Note(s)',
+ 83 => 'IM Service Provider',
+ ];
+ if (!$isContactExport) {
+ unset($headers[80]);
+ unset($headers[81]);
+ unset($headers[82]);
+ }
+ return $headers;
+ }
+
+ /**
+ * Get the definition for activity headers.
+ *
+ * @return array
+ */
+ protected function getActivityHeaderDefinition() {
+ return [
+ 81 => 'Activity ID',
+ 82 => 'Activity Type',
+ 83 => 'Activity Type ID',
+ 84 => 'Subject',
+ 85 => 'Activity Date',
+ 86 => 'Duration',
+ 87 => 'Location',
+ 88 => 'Details',
+ 89 => 'Activity Status',
+ 90 => 'Activity Priority',
+ 91 => 'Source Contact',
+ 92 => 'source_record_id',
+ 93 => 'Test',
+ 94 => 'Campaign ID',
+ 95 => 'result',
+ 96 => 'Engagement Index',
+ 97 => 'parent_id',
+ ];
+ }
+
+ /**
+ * Get the definition for case headers.
+ *
+ * @return array
+ */
+ protected function getCaseHeaderDefinition() {
+ return [
+ 81 => 'contact_id',
+ 82 => 'Case ID',
+ 83 => 'case_activity_subject',
+ 84 => 'Case Subject',
+ 85 => 'Case Status',
+ 86 => 'Case Type',
+ 87 => 'Role in Case',
+ 88 => 'Case is in the Trash',
+ 89 => 'case_recent_activity_date',
+ 90 => 'case_recent_activity_type',
+ 91 => 'case_scheduled_activity_date',
+ 92 => 'Case Start Date',
+ 93 => 'Case End Date',
+ 94 => 'case_source_contact_id',
+ 95 => 'case_activity_status',
+ 96 => 'case_activity_duration',
+ 97 => 'case_activity_medium_id',
+ 98 => 'case_activity_details',
+ 99 => 'case_activity_is_auto',
+ ];
+ }
+
+ /**
+ * Get the definition for contribute headers.
+ *
+ * @return array
+ */
+ protected function getContributeHeaderDefinition() {
+ return [
+ 81 => 'Financial Type',
+ 82 => 'Contribution Source',
+ 83 => 'Date Received',
+ 84 => 'Thank-you Date',
+ 85 => 'Cancel Date',
+ 86 => 'Total Amount',
+ 87 => 'Accounting Code',
+ 88 => 'payment_instrument',
+ 89 => 'Payment Method ID',
+ 90 => 'Check Number',
+ 91 => 'Non-deductible Amount',
+ 92 => 'Fee Amount',
+ 93 => 'Net Amount',
+ 94 => 'Transaction ID',
+ 95 => 'Invoice Reference',
+ 96 => 'Invoice Number',
+ 97 => 'Currency',
+ 98 => 'Cancel Reason',
+ 99 => 'Receipt Date',
+ 100 => 'Product Name',
+ 101 => 'SKU',
+ 102 => 'Product Option',
+ 103 => 'Fulfilled Date',
+ 104 => 'Start date for premium',
+ 105 => 'End date for premium',
+ 106 => 'Test',
+ 107 => 'Is Pay Later',
+ 108 => 'contribution_status',
+ 109 => 'Recurring Contribution ID',
+ 110 => 'Amount Label',
+ 111 => 'Contribution Note',
+ 112 => 'Batch Name',
+ 113 => 'Campaign Title',
+ 114 => 'Campaign ID',
+ 115 => 'Premium',
+ 116 => 'Soft Credit For',
+ 117 => 'Soft Credit Amount',
+ 118 => 'Soft Credit Type',
+ 119 => 'Soft Credit For Contact ID',
+ 120 => 'Soft Credit For Contribution ID',
+ ];
+ }
+
+ /**
+ * Get the definition for event headers.
+ *
+ * @return array
+ */
+ protected function getParticipantHeaderDefinition() {
+ return [
+ 81 => 'Event',
+ 82 => 'Event Title',
+ 83 => 'Event Start Date',
+ 84 => 'Event End Date',
+ 85 => 'Event Type',
+ 86 => 'Participant ID',
+ 87 => 'Participant Status',
+ 88 => 'Participant Status Id',
+ 89 => 'Participant Role',
+ 90 => 'Participant Role Id',
+ 91 => 'Participant Note',
+ 92 => 'Register date',
+ 93 => 'Participant Source',
+ 94 => 'Fee level',
+ 95 => 'Test',
+ 96 => 'Is Pay Later',
+ 97 => 'Fee Amount',
+ 98 => 'Discount Name',
+ 99 => 'Fee Currency',
+ 100 => 'Registered By ID',
+ 101 => 'Campaign ID',
+ ];
+ }
+
+ /**
+ * Get the definition for member headers.
+ *
+ * @return array
+ */
+ protected function getMemberHeaderDefinition() {
+ return [
+ 81 => 'Membership Type',
+ 82 => 'Test',
+ 83 => 'Is Pay Later',
+ 84 => 'Member Since',
+ 85 => 'Membership Start Date',
+ 86 => 'Membership Expiration Date',
+ 87 => 'Source',
+ 88 => 'Membership Status',
+ 89 => 'Membership ID',
+ 90 => 'Primary Member ID',
+ 91 => 'max_related',
+ 92 => 'membership_recur_id',
+ 93 => 'Campaign ID',
+ 94 => 'member_is_override',
+ 95 => 'member_auto_renew',
+ ];
+ }
+
+ /**
+ * Get the definition for pledge headers.
+ *
+ * @return array
+ */
+ protected function getPledgeHeaderDefinition() {
+ return [
+ 81 => 'Pledge ID',
+ 82 => 'Total Pledged',
+ 83 => 'Total Paid',
+ 84 => 'Pledge Made',
+ 85 => 'pledge_start_date',
+ 86 => 'Next Payment Date',
+ 87 => 'Next Payment Amount',
+ 88 => 'Pledge Status',
+ 89 => 'Test',
+ 90 => 'Pledge Contribution Page Id',
+ 91 => 'pledge_financial_type',
+ 92 => 'Pledge Frequency Interval',
+ 93 => 'Pledge Frequency Unit',
+ 94 => 'pledge_currency',
+ 95 => 'Campaign ID',
+ 96 => 'Balance Amount',
+ 97 => 'Payment ID',
+ 98 => 'Scheduled Amount',
+ 99 => 'Scheduled Date',
+ 100 => 'Paid Amount',
+ 101 => 'Paid Date',
+ 102 => 'Last Reminder',
+ 103 => 'Reminders Sent',
+ 104 => 'Pledge Payment Status',
+ ];
+ }
+
/**
* Get the column definition for exports.
*
'country' => 'country varchar(64)',
'phone' => 'phone varchar(32)',
'phone_ext' => 'phone_ext varchar(16)',
+ 'phone_type_id' => 'phone_type_id varchar(16)',
'email' => 'email varchar(254)',
'on_hold' => 'on_hold varchar(16)',
'is_bulkmail' => 'is_bulkmail varchar(16)',
'groups' => 'groups text',
'tags' => 'tags text',
'notes' => 'notes text',
- 'phone_type_id' => 'phone_type_id varchar(255)',
'provider_id' => 'provider_id varchar(255)',
];
if (!$isContactExport) {
'openid' => 'openid varchar(255)',
'world_region' => 'world_region varchar(128)',
'url' => 'url varchar(128)',
- 'phone_type_id' => 'phone_type_id varchar(255)',
+ 'phone_type_id' => 'phone_type_id varchar(16)',
'provider_id' => 'provider_id varchar(255)',
'financial_type' => 'financial_type varchar(64)',
'contribution_source' => 'contribution_source varchar(255)',
];
}
+ /**
+ * Change our location types so we have some edge cases in the mix.
+ *
+ * - a space in the name
+ * - name differs from label
+ * - non-anglo char in the label (not valid in the name).
+ */
+ protected function diversifyLocationTypes() {
+ $this->locationTypes['Main'] = $this->callAPISuccess('Location_type', 'get', [
+ 'name' => 'Main',
+ 'return' => 'id',
+ 'api.LocationType.Create' => ['display_name' => 'Méin'],
+ ]);
+ $this->locationTypes['Whare Kai'] = $this->callAPISuccess('Location_type', 'create', [
+ 'name' => 'Whare Kai',
+ 'display_name' => 'Whare Kai',
+ ]);
+ }
+
}