<?php
/*
+--------------------------------------------------------------------+
- | CiviCRM version 4.3 |
+ | CiviCRM version 4.6 |
+--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2013 |
+ | Copyright CiviCRM LLC (c) 2004-2014 |
+--------------------------------------------------------------------+
| This file is a part of CiviCRM. |
| |
/**
*
* @package CRM
- * @copyright CiviCRM LLC (c) 2004-2013
+ * @copyright CiviCRM LLC (c) 2004-2014
* $Id$
*
*/
-
-
-abstract class CRM_Member_Import_Parser {
- CONST MAX_ERRORS = 250, MAX_WARNINGS = 25, VALID = 1, WARNING = 2, ERROR = 4, CONFLICT = 8, STOP = 16, DUPLICATE = 32, MULTIPLE_DUPE = 64, NO_MATCH = 128;
-
- /**
- * various parser modes
- */
- CONST MODE_MAPFIELD = 1, MODE_PREVIEW = 2, MODE_SUMMARY = 4, MODE_IMPORT = 8;
-
- /**
- * codes for duplicate record handling
- */
- CONST DUPLICATE_SKIP = 1, DUPLICATE_REPLACE = 2, DUPLICATE_UPDATE = 4, DUPLICATE_FILL = 8, DUPLICATE_NOCHECK = 16;
-
- /**
- * various Contact types
- */
- CONST CONTACT_INDIVIDUAL = 1, CONTACT_HOUSEHOLD = 2, CONTACT_ORGANIZATION = 4;
+abstract class CRM_Member_Import_Parser extends CRM_Import_Parser {
protected $_fileName;
/**#@+
- * @access protected
* @var integer
*/
/**
- * imported file size
+ * Imported file size
*/
protected $_fileSize;
/**
- * seperator being used
+ * Seperator being used
*/
protected $_seperator;
/**
- * total number of lines in file
+ * Total number of lines in file
*/
protected $_lineCount;
/**
- * total number of non empty lines
- */
- protected $_totalCount;
-
- /**
- * running total number of valid lines
- */
- protected $_validCount;
-
- /**
- * running total number of invalid rows
- */
- protected $_invalidRowCount;
-
- /**
- * maximum number of invalid rows to store
- */
- protected $_maxErrorCount;
-
- /**
- * array of error lines, bounded by MAX_ERROR
- */
- protected $_errors;
-
- /**
- * total number of conflict lines
- */
- protected $_conflictCount;
-
- /**
- * array of conflict lines
- */
- protected $_conflicts;
-
- /**
- * total number of duplicate (from database) lines
- */
- protected $_duplicateCount;
-
- /**
- * array of duplicate lines
- */
- protected $_duplicates;
-
- /**
- * running total number of warnings
- */
- protected $_warningCount;
-
- /**
- * maximum number of warnings to store
- */
- protected $_maxWarningCount = self::MAX_WARNINGS;
-
- /**
- * array of warning lines, bounded by MAX_WARNING
- */
- protected $_warnings;
-
- /**
- * array of all the fields that could potentially be part
- * of this import process
- * @var array
- */
- protected $_fields;
-
- /**
- * array of the fields that are actually part of the import process
- * the position in the array also dictates their position in the import
- * file
- * @var array
- */
- protected $_activeFields;
-
- /**
- * cache the count of active fields
- *
- * @var int
- */
- protected $_activeFieldCount;
-
- /**
- * maximum number of non-empty/comment lines to process
- *
- * @var int
- */
- protected $_maxLinesToProcess;
-
- /**
- * cache of preview rows
- *
- * @var array
- */
- protected $_rows;
-
- /**
- * filename of error data
- *
- * @var string
- */
- protected $_errorFileName;
-
- /**
- * filename of conflict data
- *
- * @var string
- */
- protected $_conflictFileName;
-
- /**
- * filename of duplicate data
- *
- * @var string
- */
- protected $_duplicateFileName;
-
- /**
- * whether the file has a column header or not
+ * Whether the file has a column header or not
*
* @var boolean
*/
protected $_haveColumnHeader;
/**
- * contact type
+ * @param string $fileName
+ * @param string $seperator
+ * @param $mapper
+ * @param bool $skipColumnHeader
+ * @param int $mode
+ * @param int $contactType
+ * @param int $onDuplicate
*
- * @var int
+ * @return mixed
+ * @throws Exception
*/
-
- public $_contactType;
- function __construct() {
- $this->_maxLinesToProcess = 0;
- $this->_maxErrorCount = self::MAX_ERRORS;
- }
-
- abstract function init();
function run($fileName,
$seperator = ',',
&$mapper,
$skipColumnHeader = FALSE,
- $mode = self::MODE_PREVIEW,
- $contactType = self::CONTACT_INDIVIDUAL,
- $onDuplicate = self::DUPLICATE_SKIP
+ $mode = self::MODE_PREVIEW,
+ $contactType = self::CONTACT_INDIVIDUAL,
+ $onDuplicate = self::DUPLICATE_SKIP
) {
if (!is_array($fileName)) {
CRM_Core_Error::fatal();
$this->_invalidRowCount = $this->_validCount = 0;
$this->_totalCount = $this->_conflictCount = 0;
- $this->_errors = array();
- $this->_warnings = array();
+ $this->_errors = array();
+ $this->_warnings = array();
$this->_conflicts = array();
$this->_fileSize = number_format(filesize($fileName) / 1024.0, 2);
return $this->fini();
}
- abstract function mapField(&$values);
- abstract function preview(&$values);
- abstract function summary(&$values);
- abstract function import($onDuplicate, &$values);
-
- abstract function fini();
-
/**
* Given a list of the importable field keys that the user has selected
* set the active fields array to this list
* @param array mapped array of values
*
* @return void
- * @access public
*/
- function setActiveFields($fieldKeys) {
+ public function setActiveFields($fieldKeys) {
$this->_activeFieldCount = count($fieldKeys);
foreach ($fieldKeys as $key) {
if (empty($this->_fields[$key])) {
}
}
- /*function setActiveFieldLocationTypes( $elements ) {
- for ($i = 0; $i < count( $elements ); $i++) {
- $this->_activeFields[$i]->_hasLocationType = $elements[$i];
- }
- }
-
- function setActiveFieldPhoneTypes( $elements ) {
- for ($i = 0; $i < count( $elements ); $i++) {
- $this->_activeFields[$i]->_phoneType = $elements[$i];
- }
- }*/
- 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;
- }
-
/**
- * function to format the field values for input to the api
+ * Format the field values for input to the api
*
* @return array (reference ) associative array of name/value pairs
- * @access public
*/
- function &getActiveFieldParams() {
+ public function &getActiveFieldParams() {
$params = array();
for ($i = 0; $i < $this->_activeFieldCount; $i++) {
if (isset($this->_activeFields[$i]->_value)
return $params;
}
- function getSelectValues() {
- $values = array();
- foreach ($this->_fields as $name => $field) {
- $values[$name] = $field->_title;
- }
- return $values;
- }
-
- function getSelectTypes() {
- $values = array();
- foreach ($this->_fields as $name => $field) {
- if (isset($field->_hasLocationType)) {
- $values[$name] = $field->_hasLocationType;
- }
- }
- return $values;
- }
-
- function getHeaderPatterns() {
- $values = array();
- foreach ($this->_fields as $name => $field) {
- if (isset($field->_headerPattern)) {
- $values[$name] = $field->_headerPattern;
- }
- }
- return $values;
- }
-
- function getDataPatterns() {
- $values = array();
- foreach ($this->_fields as $name => $field) {
- $values[$name] = $field->_dataPattern;
- }
- return $values;
- }
-
- function addField($name, $title, $type = CRM_Utils_Type::T_INT, $headerPattern = '//', $dataPattern = '//') {
+ /**
+ * @param string $name
+ * @param $title
+ * @param int $type
+ * @param string $headerPattern
+ * @param string $dataPattern
+ */
+ public function addField($name, $title, $type = CRM_Utils_Type::T_INT, $headerPattern = '//', $dataPattern = '//') {
if (empty($name)) {
$this->_fields['doNotImport'] = new CRM_Member_Import_Field($name, $title, $type, $headerPattern, $dataPattern);
}
}
}
- /**
- * setter function
- *
- * @param int $max
- *
- * @return void
- * @access public
- */
- function setMaxLinesToProcess($max) {
- $this->_maxLinesToProcess = $max;
- }
-
/**
* Store parser values
*
* @param CRM_Core_Session $store
*
+ * @param int $mode
+ *
* @return void
- * @access public
*/
- function set($store, $mode = self::MODE_SUMMARY) {
+ public function set($store, $mode = self::MODE_SUMMARY) {
$store->set('fileSize', $this->_fileSize);
$store->set('lineCount', $this->_lineCount);
$store->set('seperator', $this->_seperator);
switch ($this->_contactType) {
case 'Individual':
- $store->set('contactType', CRM_Member_Import_Parser::CONTACT_INDIVIDUAL);
+ $store->set('contactType', CRM_Import_Parser::CONTACT_INDIVIDUAL);
break;
case 'Household':
- $store->set('contactType', CRM_Member_Import_Parser::CONTACT_HOUSEHOLD);
+ $store->set('contactType', CRM_Import_Parser::CONTACT_HOUSEHOLD);
break;
case 'Organization':
- $store->set('contactType', CRM_Member_Import_Parser::CONTACT_ORGANIZATION);
+ $store->set('contactType', CRM_Import_Parser::CONTACT_ORGANIZATION);
}
if ($this->_invalidRowCount) {
/**
* Export data to a CSV file
*
- * @param string $filename
+ * @param string $fileName
* @param array $header
- * @param data $data
+ * @param array $data
*
* @return void
- * @access public
*/
- static function exportCSV($fileName, $header, $data) {
+ public static function exportCSV($fileName, $header, $data) {
$output = array();
$fd = fopen($fileName, 'w');
fclose($fd);
}
- /**
- * Remove single-quote enclosures from a value array (row)
- *
- * @param array $values
- * @param string $enclosure
- *
- * @return void
- * @static
- * @access public
- */
- static function encloseScrub(&$values, $enclosure = "'") {
- if (empty($values)) {
- return;
- }
-
- foreach ($values as $k => $v) {
- $values[$k] = preg_replace("/^$enclosure(.*)$enclosure$/", '$1', $v);
- }
- }
-
- function errorFileName($type) {
- $fileName = CRM_Contact_Import_Parser::errorFileName($type);
- return $fileName;
- }
-
- function saveFileName($type) {
- $fileName = CRM_Contact_Import_Parser::saveFileName($type);
- return $fileName;
- }
}
-