public function testSanitizeValueBySanitizerTypesForPasswordTypeThatIsNotRequired() { //Test a non-required password with no value or default value. $importSanitizeResultsUtil = new ImportSanitizeResultsUtil(); $columnMappingData = array('type' => 'importColumn', 'mappingRulesData' => array('PasswordDefaultValueModelAttributeMappingRuleForm' => array('defaultValue' => null))); $sanitizerUtilTypes = PasswordAttributeImportRules::getSanitizerUtilTypesInProcessingOrder(); $sanitizedValue = ImportSanitizerUtil::sanitizeValueBySanitizerTypes($sanitizerUtilTypes, 'User', 'hash', null, 'column_0', $columnMappingData, $importSanitizeResultsUtil); $this->assertNull($sanitizedValue); $this->assertTrue($importSanitizeResultsUtil->shouldSaveModel()); $messages = $importSanitizeResultsUtil->getMessages(); $this->assertEquals(0, count($messages)); //Test a non-required password with a valid value, and a default value. The valid value should come through. $importSanitizeResultsUtil = new ImportSanitizeResultsUtil(); $columnMappingData = array('type' => 'importColumn', 'mappingRulesData' => array('PasswordDefaultValueModelAttributeMappingRuleForm' => array('defaultValue' => 'something valid'))); $sanitizerUtilTypes = PasswordAttributeImportRules::getSanitizerUtilTypesInProcessingOrder(); $sanitizedValue = ImportSanitizerUtil::sanitizeValueBySanitizerTypes($sanitizerUtilTypes, 'User', 'hash', 'aValue', 'column_0', $columnMappingData, $importSanitizeResultsUtil); $this->assertEquals('aValue', $sanitizedValue); $this->assertTrue($importSanitizeResultsUtil->shouldSaveModel()); $messages = $importSanitizeResultsUtil->getMessages(); $this->assertEquals(0, count($messages)); //Test a non-required password with a value that is too long and no specified default value. $importSanitizeResultsUtil = new ImportSanitizeResultsUtil(); $columnMappingData = array('type' => 'importColumn', 'mappingRulesData' => array('PasswordDefaultValueModelAttributeMappingRuleForm' => array('defaultValue' => null))); $sanitizerUtilTypes = PasswordAttributeImportRules::getSanitizerUtilTypesInProcessingOrder(); $value = self::getStringByLength(85); $sanitizedValue = ImportSanitizerUtil::sanitizeValueBySanitizerTypes($sanitizerUtilTypes, 'User', 'hash', $value, 'column_0', $columnMappingData, $importSanitizeResultsUtil); $this->assertEquals(substr($value, 0, 32), $sanitizedValue); $this->assertTrue($importSanitizeResultsUtil->shouldSaveModel()); $messages = $importSanitizeResultsUtil->getMessages(); $this->assertEquals(0, count($messages)); }
/** * Given a value and mapping data, run each sanitizer and process any messages or error information into the * ImportSanitizeResultsUtil object provided. * @param mixed $value * @param array $columnMappingData * @param object $importSanitizeResultsUtil */ public function resolveValueForImport($value, $columnMappingData, ImportSanitizeResultsUtil $importSanitizeResultsUtil) { assert('is_array($columnMappingData)'); $modelClassName = $this->getModelClassName(); $value = ImportSanitizerUtil::sanitizeValueBySanitizerTypes(static::getSanitizerUtilTypesInProcessingOrder(), $this->getModelClassName(), $this->getModelAttributeName(), $value, $columnMappingData, $importSanitizeResultsUtil); return array($this->getModelAttributeName() => $value); }
/** * Given an 'id' value, sanitize this value based on the id being either a zurmo model id or an external * system id. This methods requires that there is only one sanitizer type to process. * (non-PHPdoc) * @see NonDerivedAttributeImportRules::resolveValueForImport() */ public function resolveValueForImport($value, $columnName, $columnMappingData, ImportSanitizeResultsUtil $importSanitizeResultsUtil) { assert('is_string($columnName)'); assert('is_array($columnMappingData)'); $sanitizerUtilTypes = static::getSanitizerUtilTypesInProcessingOrder(); if (count($sanitizerUtilTypes) == 1 && $sanitizerUtilTypes[0] == 'SelfIdValueType') { $modelClassName = $this->getModelClassName(); try { $value = ImportSanitizerUtil::sanitizeValueBySanitizerTypes(static::getSanitizerUtilTypesInProcessingOrder(), $this->getModelClassName(), $this->getModelAttributeName(), $value, $columnName, $columnMappingData, $importSanitizeResultsUtil); if ($value != null) { return array($this->getModelAttributeName() => $value); } else { return array(); } } catch (ExternalSystemIdNotFoundException $e) { if ($value != null) { return array(ExternalSystemIdUtil::EXTERNAL_SYSTEM_ID_COLUMN_NAME => $value); } else { return array(); } } } else { throw new NotSupportedException(); } }
/** * There is a special way you can import rateToBase and currencyCode for an amount attribute. * if the column data is formatted like: $54.67__1.2__USD then it will split the column and properly * handle rate and currency code. Eventually this will be exposed in the user interface * * @param mixed $value * @param string $columnName * @param array $columnMappingData * @param ImportSanitizeResultsUtil $importSanitizeResultsUtil * @return array */ public function resolveValueForImport($value, $columnName, $columnMappingData, ImportSanitizeResultsUtil $importSanitizeResultsUtil) { assert('is_string($columnName)'); $attributeNames = $this->getRealModelAttributeNames(); $modelClassName = $this->getModelClassName(); $parts = explode(FormModelUtil::DELIMITER, $value); if (count($parts) == 3) { $value = $parts[0]; $rateToBase = $parts[1]; try { $currency = Currency::getByCode($parts[2]); } catch (NotFoundException $e) { $currency = null; $importSanitizeResultsUtil->addMessage('Currency Code: ' . $parts[2] . ' is invalid.'); $importSanitizeResultsUtil->setModelShouldNotBeSaved(); } } else { $rateToBase = $columnMappingData['mappingRulesData']['CurrencyRateToBaseModelAttributeMappingRuleForm']['rateToBase']; $currency = Currency::getById((int) $columnMappingData['mappingRulesData']['CurrencyIdModelAttributeMappingRuleForm']['id']); } $sanitizedValue = ImportSanitizerUtil::sanitizeValueBySanitizerTypes(static::getSanitizerUtilTypesInProcessingOrder(), $modelClassName, $this->getModelAttributeName(), $value, $columnName, $columnMappingData, $importSanitizeResultsUtil); if ($sanitizedValue == null) { $sanitizedValue = 0; } $currencyValue = new CurrencyValue(); $currencyValue->setScenario('importModel'); $currencyValue->value = $sanitizedValue; $currencyValue->rateToBase = $rateToBase; $currencyValue->currency = $currency; return array($this->getModelAttributeName() => $currencyValue); }
public function resolveValueForImport($value, $columnMappingData, ImportSanitizeResultsUtil $importSanitizeResultsUtil) { $attributeNames = $this->getRealModelAttributeNames(); assert('count($attributeNames) == 1'); assert('$attributeNames[0] == "state"'); $modelClassName = $this->getModelClassName(); $value = ImportSanitizerUtil::sanitizeValueBySanitizerTypes(static::getSanitizerUtilTypesInProcessingOrder(), $modelClassName, null, $value, $columnMappingData, $importSanitizeResultsUtil); return array('state' => $value); }
public function resolveValueForImport($value, $columnMappingData, ImportSanitizeResultsUtil $importSanitizeResultsUtil) { $modelClassName = $this->getModelClassName(); $derivedModelClassName = static::getDerivedModelClassName(); $sanitizedValue = ImportSanitizerUtil::sanitizeValueBySanitizerTypes(static::getSanitizerUtilTypesInProcessingOrder(), $modelClassName, null, $value, $columnMappingData, $importSanitizeResultsUtil); if ($sanitizedValue == null && $columnMappingData['mappingRulesData']['DefaultModelNameIdDerivedAttributeMappingRuleForm']['defaultModelId'] != null) { $modelId = $columnMappingData['mappingRulesData']['DefaultModelNameIdDerivedAttributeMappingRuleForm']['defaultModelId']; $sanitizedValue = $derivedModelClassName::getById((int) $modelId); } return array(static::getDerivedAttributeName() => $sanitizedValue); }
public function resolveValueForImport($value, $columnMappingData, ImportSanitizeResultsUtil $importSanitizeResultsUtil) { $attributeNames = $this->getRealModelAttributeNames(); assert('$attributeNames[0] == "firstName"'); assert('$attributeNames[1] == "lastName"'); $modelClassName = $this->getModelClassName(); $sanitizedValue = ImportSanitizerUtil::sanitizeValueBySanitizerTypes(static::getSanitizerUtilTypesInProcessingOrder(), $modelClassName, null, $value, $columnMappingData, $importSanitizeResultsUtil); @(list($firstName, $lastName) = explode(' ', trim($sanitizedValue))); if ($lastName == null) { $lastName = $firstName; $firstName = null; } return array('firstName' => $firstName, 'lastName' => $lastName); }
public function resolveValueForImport($value, $columnMappingData, ImportSanitizeResultsUtil $importSanitizeResultsUtil) { assert('is_array($columnMappingData)'); $modelClassName = $this->getModelClassName(); $value = ImportSanitizerUtil::sanitizeValueBySanitizerTypes(static::getSanitizerUtilTypesInProcessingOrder(), $modelClassName, null, $value, $columnMappingData, $importSanitizeResultsUtil); if ($value == null) { $mappingRuleFormClassName = 'UserStatusDefaultValueMappingRuleForm'; $mappingRuleData = $columnMappingData['mappingRulesData'][$mappingRuleFormClassName]; assert('$mappingRuleData != null'); if (isset($mappingRuleData['defaultValue'])) { $value = $mappingRuleData['defaultValue']; } else { //The default value dropdown will be either active or inactive. There is no blank. throw new NotSupportedException(); } } return array('status' => $value); }
public function resolveValueForImport($value, $columnMappingData, ImportSanitizeResultsUtil $importSanitizeResultsUtil) { $attributeNames = $this->getRealModelAttributeNames(); assert('count($attributeNames) == 1'); assert('$attributeNames[0] == "hash"'); assert('is_array($columnMappingData)'); $modelClassName = $this->getModelClassName(); $value = ImportSanitizerUtil::sanitizeValueBySanitizerTypes(static::getSanitizerUtilTypesInProcessingOrder(), $modelClassName, 'hash', $value, $columnMappingData, $importSanitizeResultsUtil); if ($value == null) { $mappingRuleFormClassName = 'PasswordDefaultValueModelAttributeMappingRuleForm'; $mappingRuleData = $columnMappingData['mappingRulesData'][$mappingRuleFormClassName]; assert('$mappingRuleData != null'); if (isset($mappingRuleData['defaultValue'])) { $value = $mappingRuleData['defaultValue']; } } return array('hash' => md5($value)); }
public function testSanitizeValueBySanitizerTypesForContactStateTypeThatIsRequired() { $contactStates = ContactState::getAll(); $this->assertEquals(6, count($contactStates)); //Test a required contact state with no value or default value. $importSanitizeResultsUtil = new ImportSanitizeResultsUtil(); $columnMappingData = array('type' => 'importColumn', 'mappingRulesData' => array('DefaultContactStateIdMappingRuleForm' => array('defaultStateId' => null))); $sanitizerUtilTypes = ContactStateAttributeImportRules::getSanitizerUtilTypesInProcessingOrder(); $sanitizedValue = ImportSanitizerUtil::sanitizeValueBySanitizerTypes($sanitizerUtilTypes, 'Contact', null, null, 'column_0', $columnMappingData, $importSanitizeResultsUtil); $this->assertNull($sanitizedValue); $this->assertFalse($importSanitizeResultsUtil->shouldSaveModel()); $messages = $importSanitizeResultsUtil->getMessages(); $this->assertEquals(1, count($messages)); $compareMessage = 'Contact - The status is required. Neither a value nor a default was specified.'; $this->assertEquals($compareMessage, $messages[0]); //Test a required contact state with a valid value, and a default value. The valid value should come through. $importSanitizeResultsUtil = new ImportSanitizeResultsUtil(); $columnMappingData = array('type' => 'importColumn', 'mappingRulesData' => array('DefaultContactStateIdMappingRuleForm' => array('defaultStateId' => $contactStates[4]->id))); $sanitizerUtilTypes = ContactStateAttributeImportRules::getSanitizerUtilTypesInProcessingOrder(); $sanitizedValue = ImportSanitizerUtil::sanitizeValueBySanitizerTypes($sanitizerUtilTypes, 'Contact', null, $contactStates[5]->id, 'column_0', $columnMappingData, $importSanitizeResultsUtil); $this->assertEquals($contactStates[5], $sanitizedValue); $this->assertTrue($importSanitizeResultsUtil->shouldSaveModel()); $messages = $importSanitizeResultsUtil->getMessages(); $this->assertEquals(0, count($messages)); //Test a required contact state with no value, and a default value. $importSanitizeResultsUtil = new ImportSanitizeResultsUtil(); $columnMappingData = array('type' => 'importColumn', 'mappingRulesData' => array('DefaultContactStateIdMappingRuleForm' => array('defaultStateId' => $contactStates[4]->id))); $sanitizerUtilTypes = ContactStateAttributeImportRules::getSanitizerUtilTypesInProcessingOrder(); $sanitizedValue = ImportSanitizerUtil::sanitizeValueBySanitizerTypes($sanitizerUtilTypes, 'Contact', null, null, 'column_0', $columnMappingData, $importSanitizeResultsUtil); $this->assertEquals($contactStates[4], $sanitizedValue); $this->assertTrue($importSanitizeResultsUtil->shouldSaveModel()); $messages = $importSanitizeResultsUtil->getMessages(); $this->assertEquals(0, count($messages)); //Test a required contact state with a value that is invalid $importSanitizeResultsUtil = new ImportSanitizeResultsUtil(); $columnMappingData = array('type' => 'importColumn', 'mappingRulesData' => array('DefaultContactStateIdMappingRuleForm' => array('defaultValue' => null))); $sanitizerUtilTypes = ContactStateAttributeImportRules::getSanitizerUtilTypesInProcessingOrder(); $sanitizedValue = ImportSanitizerUtil::sanitizeValueBySanitizerTypes($sanitizerUtilTypes, 'Contact', null, 'somethingnotright', 'column_0', $columnMappingData, $importSanitizeResultsUtil); $this->assertFalse($importSanitizeResultsUtil->shouldSaveModel()); $messages = $importSanitizeResultsUtil->getMessages(); $this->assertEquals(1, count($messages)); $compareMessage = 'Contact - Status specified does not exist.'; $this->assertEquals($compareMessage, $messages[0]); //Test a required contact state with a state that is for leads, not contacts. $importSanitizeResultsUtil = new ImportSanitizeResultsUtil(); $columnMappingData = array('type' => 'importColumn', 'mappingRulesData' => array('DefaultContactStateIdMappingRuleForm' => array('defaultValue' => null))); $sanitizerUtilTypes = ContactStateAttributeImportRules::getSanitizerUtilTypesInProcessingOrder(); $sanitizedValue = ImportSanitizerUtil::sanitizeValueBySanitizerTypes($sanitizerUtilTypes, 'Contact', null, $contactStates[1]->id, 'column_0', $columnMappingData, $importSanitizeResultsUtil); $this->assertFalse($importSanitizeResultsUtil->shouldSaveModel()); $messages = $importSanitizeResultsUtil->getMessages(); $this->assertEquals(1, count($messages)); $compareMessage = 'Contact - Status specified is invalid.'; $this->assertEquals($compareMessage, $messages[0]); }
/** * Given a value and mapping data, run each sanitizer and process any messages or error information into the * ImportSanitizeResultsUtil object provided. * @param mixed $value * @param string $columnName * @param array $columnMappingData * @param ImportSanitizeResultsUtil $importSanitizeResultsUtil * @return mixed $value */ public function resolveValueForImport($value, $columnName, $columnMappingData, ImportSanitizeResultsUtil $importSanitizeResultsUtil) { assert('is_string($columnName)'); assert('is_array($columnMappingData)'); $modelClassName = $this->getModelClassName(); $value = ImportSanitizerUtil::sanitizeValueBySanitizerTypes(static::getSanitizerUtilTypesInProcessingOrder(), $this->getModelClassName(), $this->getModelAttributeName(), $value, $columnName, $columnMappingData, $importSanitizeResultsUtil, $this->penultimateModelClassName, $this->penultimateAttributeName, $this->getExplicitReadWriteModelPermissions()); return array($this->getModelAttributeName() => $value); }
public function testSanitizeValueBySanitizerTypesForUserTypeThatIsRequired() { $billy = UserTestHelper::createBasicUser('billy'); $jimmy = UserTestHelper::createBasicUser('jimmy'); $sally = UserTestHelper::createBasicUser('sally'); //Update the external system id. $columnName = ExternalSystemIdUtil::EXTERNAL_SYSTEM_ID_COLUMN_NAME; RedBeanColumnTypeOptimizer::externalIdColumn(User::getTableName('User'), $columnName); $externalSystemIdColumnName = ExternalSystemIdUtil::EXTERNAL_SYSTEM_ID_COLUMN_NAME; R::exec("update " . User::getTableName('User') . " set {$externalSystemIdColumnName} = 'K' where id = {$jimmy->id}"); //Test a required user with no value or default value. $importSanitizeResultsUtil = new ImportSanitizeResultsUtil(); $columnMappingData = array('type' => 'importColumn', 'mappingRulesData' => array('DefaultModelNameIdMappingRuleForm' => array('defaultModelId' => null), 'UserValueTypeModelAttributeMappingRuleForm' => array('type' => UserValueTypeModelAttributeMappingRuleForm::ZURMO_USER_ID))); $sanitizerUtilTypes = UserAttributeImportRules::getSanitizerUtilTypesInProcessingOrder(); $sanitizedValue = ImportSanitizerUtil::sanitizeValueBySanitizerTypes($sanitizerUtilTypes, 'ImportModelTestItem', 'owner', null, 'column_0', $columnMappingData, $importSanitizeResultsUtil); $this->assertNull($sanitizedValue); $this->assertFalse($importSanitizeResultsUtil->shouldSaveModel()); $messages = $importSanitizeResultsUtil->getMessages(); $this->assertEquals(1, count($messages)); $compareMessage = 'Import - Owner Id is required and was not specified.'; $this->assertEquals($compareMessage, $messages[0]); //Test a required string with no value, but a valid default value, a user id. $importSanitizeResultsUtil = new ImportSanitizeResultsUtil(); $columnMappingData = array('type' => 'importColumn', 'mappingRulesData' => array('DefaultModelNameIdMappingRuleForm' => array('defaultModelId' => $billy->id), 'UserValueTypeModelAttributeMappingRuleForm' => array('type' => UserValueTypeModelAttributeMappingRuleForm::ZURMO_USER_ID))); $sanitizerUtilTypes = UserAttributeImportRules::getSanitizerUtilTypesInProcessingOrder(); $sanitizedValue = ImportSanitizerUtil::sanitizeValueBySanitizerTypes($sanitizerUtilTypes, 'ImportModelTestItem', 'owner', null, 'column_0', $columnMappingData, $importSanitizeResultsUtil); $this->assertEquals($billy, $sanitizedValue); $this->assertTrue($importSanitizeResultsUtil->shouldSaveModel()); $messages = $importSanitizeResultsUtil->getMessages(); $this->assertEquals(0, count($messages)); //Test a required string with a valid user id. $importSanitizeResultsUtil = new ImportSanitizeResultsUtil(); $columnMappingData = array('type' => 'importColumn', 'mappingRulesData' => array('DefaultModelNameIdMappingRuleForm' => array('defaultModelId' => null), 'UserValueTypeModelAttributeMappingRuleForm' => array('type' => UserValueTypeModelAttributeMappingRuleForm::ZURMO_USER_ID))); $sanitizerUtilTypes = UserAttributeImportRules::getSanitizerUtilTypesInProcessingOrder(); $sanitizedValue = ImportSanitizerUtil::sanitizeValueBySanitizerTypes($sanitizerUtilTypes, 'ImportModelTestItem', 'owner', $billy->id, 'column_0', $columnMappingData, $importSanitizeResultsUtil); $this->assertEquals($billy, $sanitizedValue); $this->assertTrue($importSanitizeResultsUtil->shouldSaveModel()); $messages = $importSanitizeResultsUtil->getMessages(); $this->assertEquals(0, count($messages)); //Test a required string with a valid external system user id. $importSanitizeResultsUtil = new ImportSanitizeResultsUtil(); $columnMappingData = array('type' => 'importColumn', 'mappingRulesData' => array('DefaultModelNameIdMappingRuleForm' => array('defaultModelId' => null), 'UserValueTypeModelAttributeMappingRuleForm' => array('type' => UserValueTypeModelAttributeMappingRuleForm::EXTERNAL_SYSTEM_USER_ID))); $sanitizerUtilTypes = UserAttributeImportRules::getSanitizerUtilTypesInProcessingOrder(); $sanitizedValue = ImportSanitizerUtil::sanitizeValueBySanitizerTypes($sanitizerUtilTypes, 'ImportModelTestItem', 'owner', 'K', 'column_0', $columnMappingData, $importSanitizeResultsUtil); $this->assertEquals($jimmy, $sanitizedValue); $this->assertTrue($importSanitizeResultsUtil->shouldSaveModel()); $messages = $importSanitizeResultsUtil->getMessages(); $this->assertEquals(0, count($messages)); //Test a required string with a valid username. $importSanitizeResultsUtil = new ImportSanitizeResultsUtil(); $columnMappingData = array('type' => 'importColumn', 'mappingRulesData' => array('DefaultModelNameIdMappingRuleForm' => array('defaultModelId' => null), 'UserValueTypeModelAttributeMappingRuleForm' => array('type' => UserValueTypeModelAttributeMappingRuleForm::ZURMO_USERNAME))); $sanitizerUtilTypes = UserAttributeImportRules::getSanitizerUtilTypesInProcessingOrder(); $sanitizedValue = ImportSanitizerUtil::sanitizeValueBySanitizerTypes($sanitizerUtilTypes, 'ImportModelTestItem', 'owner', 'sally', 'column_0', $columnMappingData, $importSanitizeResultsUtil); $this->assertEquals($sally, $sanitizedValue); $this->assertTrue($importSanitizeResultsUtil->shouldSaveModel()); $messages = $importSanitizeResultsUtil->getMessages(); $this->assertEquals(0, count($messages)); }