get('customSearchID'); if ($customSearchID) { CRM_Export_BAO_Export::exportCustom($this->get('customSearchClass'), $this->get('formValues'), $this->get(CRM_Utils_Sort::SORT_ORDER) ); } $this->_selectAll = FALSE; $this->_exportMode = self::CONTACT_EXPORT; $this->_componentIds = array(); $this->_componentClause = NULL; // get the submitted values based on search if ($this->_action == CRM_Core_Action::ADVANCED) { $values = $this->controller->exportValues('Advanced'); } elseif ($this->_action == CRM_Core_Action::PROFILE) { $values = $this->controller->exportValues('Builder'); } elseif ($this->_action == CRM_Core_Action::COPY) { $values = $this->controller->exportValues('Custom'); } else { // we need to determine component export $stateMachine = $this->controller->getStateMachine(); $formName = CRM_Utils_System::getClassName($stateMachine); $componentName = explode('_', $formName); $components = array('Contribute', 'Member', 'Event', 'Pledge', 'Case', 'Grant', 'Activity'); if (in_array($componentName[1], $components)) { switch ($componentName[1]) { case 'Contribute': $this->_exportMode = self::CONTRIBUTE_EXPORT; break; case 'Member': $this->_exportMode = self::MEMBER_EXPORT; break; case 'Event': $this->_exportMode = self::EVENT_EXPORT; break; case 'Pledge': $this->_exportMode = self::PLEDGE_EXPORT; break; case 'Case': $this->_exportMode = self::CASE_EXPORT; break; case 'Grant': $this->_exportMode = self::GRANT_EXPORT; break; case 'Activity': $this->_exportMode = self::ACTIVITY_EXPORT; break; } $className = "CRM_{$componentName[1]}_Form_Task"; $className::preProcessCommon( $this, true ); $values = $this->controller->exportValues('Search'); } else { $values = $this->controller->exportValues('Basic'); } } $count = 0; $this->_matchingContacts = FALSE; if (CRM_Utils_Array::value('radio_ts', $values) == 'ts_sel') { foreach ($values as $key => $value) { if (strstr($key, 'mark_x')) { $count++; } if ($count > 2) { $this->_matchingContacts = TRUE; break; } } } $componentMode = $this->get('component_mode'); switch ($componentMode) { case 2: CRM_Contribute_Form_Task::preProcessCommon($this, TRUE); $this->_exportMode = self::CONTRIBUTE_EXPORT; $componentName = array('', 'Contribute'); break; case 3: CRM_Event_Form_Task::preProcessCommon($this, TRUE); $this->_exportMode = self::EVENT_EXPORT; $componentName = array('', 'Event'); break; case 4: CRM_Activity_Form_Task::preProcessCommon($this, TRUE); $this->_exportMode = self::ACTIVITY_EXPORT; $componentName = array('', 'Activity'); break; case 5: CRM_Member_Form_Task::preProcessCommon($this, TRUE); $this->_exportMode = self::MEMBER_EXPORT; $componentName = array('', 'Member'); break; case 6: CRM_Case_Form_Task::preProcessCommon($this, TRUE); $this->_exportMode = self::CASE_EXPORT; $componentName = array('', 'Case'); break; } $this->_task = $values['task']; if ($this->_exportMode == self::CONTACT_EXPORT) { $contactTasks = CRM_Contact_Task::taskTitles(); $taskName = $contactTasks[$this->_task]; $component = FALSE; CRM_Contact_Form_Task::preProcessCommon($this, TRUE); } else { $this->assign('taskName', "Export $componentName[1]"); $className = "CRM_{$componentName[1]}_Task"; $componentTasks = $className::tasks(); $taskName = $componentTasks[$this->_task]; $component = TRUE; } if ($this->_componentTable) { $query = " SELECT count(*) FROM {$this->_componentTable} "; $totalSelectedRecords = CRM_Core_DAO::singleValueQuery($query); } else { $totalSelectedRecords = count($this->_componentIds); } $this->assign('totalSelectedRecords', $totalSelectedRecords); $this->assign('taskName', $taskName); $this->assign('component', $component); // all records actions = save a search if (($values['radio_ts'] == 'ts_all') || ($this->_task == CRM_Contact_Task::SAVE_SEARCH)) { $this->_selectAll = TRUE; $rowCount = $this->get('rowCount'); if ($rowCount > 2) { $this->_matchingContacts = TRUE; } $this->assign('totalSelectedRecords', $rowCount); } $this->assign('matchingContacts', $this->_matchingContacts); $this->set('componentIds', $this->_componentIds); $this->set('selectAll', $this->_selectAll); $this->set('exportMode', $this->_exportMode); $this->set('componentClause', $this->_componentClause); $this->set('componentTable', $this->_componentTable); } /** * Function to actually build the form * * @return void * @access public */ public function buildQuickForm() { //export option $exportOptions = $mergeOptions = $postalMailing = array(); $exportOptions[] = $this->createElement('radio', NULL, NULL, ts('Export PRIMARY fields'), self::EXPORT_ALL, array('onClick' => 'showMappingOption( );') ); $exportOptions[] = $this->createElement('radio', NULL, NULL, ts('Select fields for export'), self::EXPORT_SELECTED, array('onClick' => 'showMappingOption( );') ); $mergeOptions[] = $this->createElement('radio', NULL, NULL, ts('Do not merge'), self::EXPORT_MERGE_DO_NOT_MERGE, array('onclick' => 'showGreetingOptions( );') ); $mergeOptions[] = $this->createElement('radio', NULL, NULL, ts('Merge All Contacts with the Same Address'), self::EXPORT_MERGE_SAME_ADDRESS, array('onclick' => 'showGreetingOptions( );') ); $mergeOptions[] = $this->createElement('radio', NULL, NULL, ts('Merge Household Members into their Households'), self::EXPORT_MERGE_HOUSEHOLD, array('onclick' => 'showGreetingOptions( );') ); $postalMailing[] = $this->createElement('advcheckbox', 'postal_mailing_export', NULL, NULL ); $this->addGroup($exportOptions, 'exportOption', ts('Export Type'), '
'); if ($this->_matchingContacts) { $this->_greetingOptions = self::getGreetingOptions(); foreach ($this->_greetingOptions as $key => $value) { $fieldLabel = ts('%1 (merging > 2 contacts)', array(1 => ucwords(str_replace('_', ' ', $key)))); $this->addElement('select', $key, $fieldLabel, $value, array('onchange' => "showOther(this);") ); $this->addElement('text', "{$key}_other", ''); } } if ($this->_exportMode == self::CONTACT_EXPORT) { $this->addGroup($mergeOptions, 'mergeOption', ts('Merge Options'), '
'); $this->addGroup($postalMailing, 'postal_mailing_export', ts('Postal Mailing Export'), '
'); $this->addElement('select', 'additional_group', ts('Additional Group for Export'), array('' => ts('- select group -')) + CRM_Core_PseudoConstant::group() ); } $this->buildMapping(); $this->setDefaults(array( 'exportOption' => self::EXPORT_ALL, 'mergeOption' => self::EXPORT_MERGE_DO_NOT_MERGE, )); $this->addButtons(array( array( 'type' => 'next', 'name' => ts('Continue >>'), 'spacing' => '          ', 'isDefault' => TRUE, ), array( 'type' => 'cancel', 'name' => ts('Cancel'), ), ) ); $this->addFormRule(array('CRM_Export_Form_Select', 'formRule'), $this); } /** * Function for validation * * @param array $params (ref.) an assoc array of name/value pairs * * @param $files * @param $self * * @return mixed true or array of errors * @access public * @static */ static public function formRule($params, $files, $self) { $errors = array(); if (CRM_Utils_Array::value('mergeOption', $params) == self::EXPORT_MERGE_SAME_ADDRESS && $self->_matchingContacts ) { $greetings = array( 'postal_greeting' => 'postal_greeting_other', 'addressee' => 'addressee_other', ); foreach ($greetings as $key => $value) { $otherOption = CRM_Utils_Array::value($key, $params); if ((CRM_Utils_Array::value($otherOption, $self->_greetingOptions[$key]) == ts('Other')) && empty($params[$value])) { $label = ucwords(str_replace('_', ' ', $key)); $errors[$value] = ts('Please enter a value for %1 (merging > 2 contacts), or select a pre-configured option from the list.', array(1 => $label)); } } } return empty($errors) ? TRUE : $errors; } /** * Process the uploaded file * * @return void * @access public */ public function postProcess() { $params = $this->controller->exportValues($this->_name); $exportOption = $params['exportOption']; $mergeSameAddress = CRM_Utils_Array::value('mergeOption', $params) == self::EXPORT_MERGE_SAME_ADDRESS ? 1 : 0; $mergeSameHousehold = CRM_Utils_Array::value('mergeOption', $params) == self::EXPORT_MERGE_HOUSEHOLD ? 1 : 0; $this->set('mergeSameAddress', $mergeSameAddress); $this->set('mergeSameHousehold', $mergeSameHousehold); // instead of increasing the number of arguments to exportComponents function, we // will send $exportParams as another argument, which is an array and suppose to contain // all submitted options or any other argument $exportParams = $params; if (!empty($this->_greetingOptions)) { foreach ($this->_greetingOptions as $key => $value) { if ($option = CRM_Utils_Array::value($key, $exportParams)) { if ($this->_greetingOptions[$key][$option] == ts('Other')) { $exportParams[$key] = $exportParams["{$key}_other"]; } elseif ($this->_greetingOptions[$key][$option] == ts('List of names')) { $exportParams[$key] = ''; } else { $exportParams[$key] = $this->_greetingOptions[$key][$option]; } } } } $mappingId = CRM_Utils_Array::value('mapping', $params); if ($mappingId) { $this->set('mappingId', $mappingId); } else { $this->set('mappingId', NULL); } if ($exportOption == self::EXPORT_ALL) { CRM_Export_BAO_Export::exportComponents($this->_selectAll, $this->_componentIds, $this->get('queryParams'), $this->get(CRM_Utils_Sort::SORT_ORDER), NULL, $this->get('returnProperties'), $this->_exportMode, $this->_componentClause, $this->_componentTable, $mergeSameAddress, $mergeSameHousehold, $exportParams, $this->get('queryOperator') ); } //reset map page $this->controller->resetPage('Map'); } /** * Return a descriptive name for the page, used in wizard header * * @return string * @access public */ public function getTitle() { return ts('Export All or Selected Fields'); } /** * Function to build mapping form element * */ function buildMapping() { switch ($this->_exportMode) { case CRM_Export_Form_Select::CONTACT_EXPORT: $exportType = 'Export Contact'; break; case CRM_Export_Form_Select::CONTRIBUTE_EXPORT: $exportType = 'Export Contribution'; break; case CRM_Export_Form_Select::MEMBER_EXPORT: $exportType = 'Export Membership'; break; case CRM_Export_Form_Select::EVENT_EXPORT: $exportType = 'Export Participant'; break; case CRM_Export_Form_Select::PLEDGE_EXPORT: $exportType = 'Export Pledge'; break; case CRM_Export_Form_Select::CASE_EXPORT: $exportType = 'Export Case'; break; case CRM_Export_Form_Select::GRANT_EXPORT: $exportType = 'Export Grant'; break; case CRM_Export_Form_Select::ACTIVITY_EXPORT: $exportType = 'Export Activity'; break; } $mappingTypeId = CRM_Core_OptionGroup::getValue('mapping_type', $exportType, 'name'); $this->set('mappingTypeId', $mappingTypeId); $mappings = CRM_Core_BAO_Mapping::getMappings($mappingTypeId); if (!empty($mappings)) { $this->add('select', 'mapping', ts('Use Saved Field Mapping'), array('' => '-select-') + $mappings); } } static function getGreetingOptions() { $options = array(); $greetings = array( 'postal_greeting' => 'postal_greeting_other', 'addressee' => 'addressee_other', ); foreach ($greetings as $key => $value) { $params = array(); $optionGroupId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionGroup', $key, 'id', 'name'); CRM_Core_DAO::commonRetrieveAll('CRM_Core_DAO_OptionValue', 'option_group_id', $optionGroupId, $params, array('label', 'filter') ); $greetingCount = 1; $options[$key] = array("$greetingCount" => ts('List of names')); foreach ($params as $id => $field) { if (CRM_Utils_Array::value('filter', $field) == 4) { $options[$key][++$greetingCount] = $field['label']; } } $options[$key][++$greetingCount] = ts('Other'); } return $options; } }