_maxLinesToProcess = 0; $this->_maxErrorCount = self::MAX_ERRORS; } /** * Abstract function definitions. */ abstract protected function init(); /** * @return mixed */ abstract protected function fini(); /** * @param $values * * @return mixed */ abstract protected function mapField(&$values); /** * @param $values * * @return mixed */ abstract protected function preview(&$values); /** * @param $values * * @return mixed */ abstract protected function summary(&$values); /** * @param $onDuplicate * @param $values * * @return mixed */ abstract protected function import($onDuplicate, &$values); /** * Set and validate field values. * * @param array $elements * array. * @param $erroneousField * reference. * * @return int */ public function setActiveFieldValues($elements, &$erroneousField) { $maxCount = count($elements) < $this->_activeFieldCount ? count($elements) : $this->_activeFieldCount; for ($i = 0; $i < $maxCount; $i++) { $this->_activeFields[$i]->setValue($elements[$i]); } // reset all the values that we did not have an equivalent import element for (; $i < $this->_activeFieldCount; $i++) { $this->_activeFields[$i]->resetValue(); } // now validate the fields and return false if error $valid = self::VALID; for ($i = 0; $i < $this->_activeFieldCount; $i++) { if (!$this->_activeFields[$i]->validate()) { // no need to do any more validation $erroneousField = $i; $valid = self::ERROR; break; } } return $valid; } /** * Format the field values for input to the api. * * @return array * (reference) associative array of name/value pairs */ public function &getActiveFieldParams() { $params = array(); for ($i = 0; $i < $this->_activeFieldCount; $i++) { if (isset($this->_activeFields[$i]->_value) && !isset($params[$this->_activeFields[$i]->_name]) && !isset($this->_activeFields[$i]->_related) ) { $params[$this->_activeFields[$i]->_name] = $this->_activeFields[$i]->_value; } } return $params; } /** * @return array */ public function getSelectValues() { $values = array(); foreach ($this->_fields as $name => $field) { $values[$name] = $field->_title; } return $values; } /** * @return array */ public function getSelectTypes() { $values = array(); foreach ($this->_fields as $name => $field) { if (isset($field->_hasLocationType)) { $values[$name] = $field->_hasLocationType; } } return $values; } /** * @return array */ public function getHeaderPatterns() { $values = array(); foreach ($this->_fields as $name => $field) { if (isset($field->_headerPattern)) { $values[$name] = $field->_headerPattern; } } return $values; } /** * @return array */ public function getDataPatterns() { $values = array(); foreach ($this->_fields as $name => $field) { $values[$name] = $field->_dataPattern; } return $values; } /** * Remove single-quote enclosures from a value array (row) * * @param array $values * @param string $enclosure * * @return void */ public static function encloseScrub(&$values, $enclosure = "'") { if (empty($values)) { return; } foreach ($values as $k => $v) { $values[$k] = preg_replace("/^$enclosure(.*)$enclosure$/", '$1', $v); } } /** * Setter function. * * @param int $max * * @return void */ public function setMaxLinesToProcess($max) { $this->_maxLinesToProcess = $max; } /** * Determines the file extension based on error code. * * @var $type error code constant * @return string */ public static function errorFileName($type) { $fileName = NULL; if (empty($type)) { return $fileName; } $config = CRM_Core_Config::singleton(); $fileName = $config->uploadDir . "sqlImport"; switch ($type) { case self::ERROR: $fileName .= '.errors'; break; case self::CONFLICT: $fileName .= '.conflicts'; break; case self::DUPLICATE: $fileName .= '.duplicates'; break; case self::NO_MATCH: $fileName .= '.mismatch'; break; case self::UNPARSED_ADDRESS_WARNING: $fileName .= '.unparsedAddress'; break; } return $fileName; } /** * Determines the file name based on error code. * * @var $type error code constant * @return string */ public static function saveFileName($type) { $fileName = NULL; if (empty($type)) { return $fileName; } switch ($type) { case self::ERROR: $fileName = 'Import_Errors.csv'; break; case self::CONFLICT: $fileName = 'Import_Conflicts.csv'; break; case self::DUPLICATE: $fileName = 'Import_Duplicates.csv'; break; case self::NO_MATCH: $fileName = 'Import_Mismatch.csv'; break; case self::UNPARSED_ADDRESS_WARNING: $fileName = 'Import_Unparsed_Address.csv'; break; } return $fileName; } }