/**
* Total number of non empty lines
+ * @var int
*/
protected $_totalCount;
/**
* Running total number of valid lines
+ * @var int
*/
protected $_validCount;
/**
* Running total number of invalid rows
+ * @var int
*/
protected $_invalidRowCount;
/**
* Array of error lines, bounded by MAX_ERROR
+ * @var array
*/
protected $_errors;
/**
* Total number of conflict lines
+ * @var int
*/
protected $_conflictCount;
/**
* Array of conflict lines
+ * @var array
*/
protected $_conflicts;
/**
* Total number of duplicate (from database) lines
+ * @var int
*/
protected $_duplicateCount;
/**
* Array of duplicate lines
+ * @var array
*/
protected $_duplicates;
/**
* Running total number of warnings
+ * @var int
*/
protected $_warningCount;
/**
* Maximum number of warnings to store
+ * @var int
*/
protected $_maxWarningCount = self::MAX_WARNINGS;
/**
* Array of warning lines, bounded by MAX_WARNING
+ * @var array
*/
protected $_warnings;
*/
protected $_fields;
+ /**
+ * Metadata for all available fields, keyed by unique name.
+ *
+ * This is intended to supercede $_fields which uses a special sauce format which
+ * importableFieldsMetadata uses the standard getfields type format.
+ *
+ * @var array
+ */
+ protected $importableFieldsMetadata = [];
+
+ /**
+ * Get metadata for all importable fields in std getfields style format.
+ *
+ * @return array
+ */
+ public function getImportableFieldsMetadata(): array {
+ return $this->importableFieldsMetadata;
+ }
+
+ /**
+ * Set metadata for all importable fields in std getfields style format.
+ * @param array $importableFieldsMetadata
+ */
+ public function setImportableFieldsMetadata(array $importableFieldsMetadata) {
+ $this->importableFieldsMetadata = $importableFieldsMetadata;
+ }
+
/**
* Array of the fields that are actually part of the import process
* the position in the array also dictates their position in the import
* (reference) associative array of name/value pairs
*/
public function &getActiveFieldParams() {
- $params = array();
+ $params = [];
for ($i = 0; $i < $this->_activeFieldCount; $i++) {
if (isset($this->_activeFields[$i]->_value)
&& !isset($params[$this->_activeFields[$i]->_name])
if ($startImport) {
$status = "<div class='description'> " . ts('No processing status reported yet.') . "</div>";
//do not force the browser to display the save dialog, CRM-7640
- $contents = json_encode(array(0, $status));
+ $contents = json_encode([0, $status]);
file_put_contents($statusFile, $contents);
}
else {
$timeFormatted .= round($estimatedTime) . ' ' . ts('seconds');
$processedPercent = (int ) (($rowCount * 100) / $totalRowCount);
$statusMsg = ts('%1 of %2 records - %3 remaining',
- array(1 => $rowCount, 2 => $totalRowCount, 3 => $timeFormatted)
+ [1 => $rowCount, 2 => $totalRowCount, 3 => $timeFormatted]
);
$status = "<div class=\"description\"> <strong>{$statusMsg}</strong></div>";
- $contents = json_encode(array($processedPercent, $status));
+ $contents = json_encode([$processedPercent, $status]);
file_put_contents($statusFile, $contents);
return $currTimestamp;
* @return array
*/
public function getSelectValues() {
- $values = array();
+ $values = [];
foreach ($this->_fields as $name => $field) {
$values[$name] = $field->_title;
}
* @return array
*/
public function getSelectTypes() {
- $values = array();
+ $values = [];
foreach ($this->_fields as $name => $field) {
if (isset($field->_hasLocationType)) {
$values[$name] = $field->_hasLocationType;
* @return array
*/
public function getHeaderPatterns() {
- $values = array();
+ $values = [];
foreach ($this->_fields as $name => $field) {
if (isset($field->_headerPattern)) {
$values[$name] = $field->_headerPattern;
* @return array
*/
public function getDataPatterns() {
- $values = array();
+ $values = [];
foreach ($this->_fields as $name => $field) {
$values[$name] = $field->_dataPattern;
}
return $error;
}
+ /**
+ * Parse a field which could be represented by a label or name value rather than the DB value.
+ *
+ * We will try to match name first but if not available then see if we have a label that can be converted to a name.
+ *
+ * @param string|int|null $submittedValue
+ * @param array $fieldSpec
+ * Metadata for the field
+ *
+ * @return mixed
+ */
+ protected function parsePseudoConstantField($submittedValue, $fieldSpec) {
+ /* @var \CRM_Core_DAO $bao */
+ $bao = $fieldSpec['bao'];
+ // For historical reasons use validate as context - ie disabled name matches ARE permitted.
+ $nameOptions = $bao::buildOptions($fieldSpec['name'], 'validate');
+ if (!isset($nameOptions[$submittedValue])) {
+ $labelOptions = array_flip($bao::buildOptions($fieldSpec['name'], 'match'));
+ if (isset($labelOptions[$submittedValue])) {
+ return array_search($labelOptions[$submittedValue], $nameOptions, TRUE);
+ }
+ }
+ return '';
+ }
+
}