public static function setUpBeforeClass() { parent::setUpBeforeClass(); ImportRules::resetCache(); SecurityTestHelper::createSuperAdmin(); $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; }
/** * Override to block out additional attributes that are not importable * @return array */ public static function getNonImportableAttributeNames() { return array_merge(parent::getNonImportableAttributeNames(), array('probability')); }
/** * Get the array of attributes that cannot be mapped when using these import rules. * @return array */ public static function getNonImportableAttributeNames() { return array_merge(parent::getNonImportableAttributeNames(), array('state', 'account', 'primaryAddress__latitude', 'primaryAddress__longitude', 'primaryAddress__invalid', 'secondaryAddress__latitude', 'secondaryAddress__longitude', 'secondaryAddress__invalid')); }
/** * Process mapped columns to check for matched record by column * @param ImportRules $importRules * @param RedBeanModel $model * @param array $mappingData * @param RedBean_OODBBean $rowBean * @param ImportSanitizeResultsUtil $importSanitizeResultsUtil * @param array $skippedColumns */ protected static function processDedupeAttributesToCheckForSkipIfRequired(ImportRules $importRules, RedBeanModel $model, $mappingData, $rowBean, ImportRowDataResultsUtil $importRowDataResultsUtil, ImportSanitizeResultsUtil $importSanitizeResultsUtil, &$skippedColumns) { assert('$rowBean instanceof RedBean_OODBBean'); $isSkipped = false; //Process the dedupe fields foreach ($importRules->getDedupeAttributes() as $dedupeField) { $sourceColumnName = static::getMappedColumnNameByMappingData($dedupeField, $mappingData); if (false !== $sourceColumnName) { $columnMappingData = $mappingData[$sourceColumnName]; $attributeValueData = static::getAttributeValueData($importRules, $sourceColumnName, $columnMappingData, $rowBean, $importSanitizeResultsUtil); if (!$importSanitizeResultsUtil->shouldSaveModel()) { $importRowDataResultsUtil->addMessages($importSanitizeResultsUtil->getMessages()); $importRowDataResultsUtil->setStatusToError(); $isSkipped = true; } $skippedColumns[] = $sourceColumnName; } } return $isSkipped; }
public function testRenderMappingRulesElementForDecimalAttributeWithPrecision() { Yii::app()->user->userModel = SecurityTestHelper::createSuperAdmin(); DesignerTestHelper::createDecimalAttribute('decimal', false, 'Account'); ImportRules::resetCache(); $data = ImportModelTestItemImportRules::getMappableAttributeIndicesAndDerivedTypes(); $mappingFormLayoutUtil = ImportToMappingFormLayoutUtil::make('ImportModelTestItem', new ZurmoActiveForm(), 'ImportModelTestItem', $data); $columnName = 'SampleColumn'; //Test Decimal/Float attribute that has precision $content = $mappingFormLayoutUtil->renderMappingRulesElements($columnName, 'decimalCstm', 'Accounts', 'importColumn', array()); $this->assertTrue(stripos($content, '<h4>Rules</h4>') !== false); }
/** * Given a row of data, resolve each value of the row for import and either create or update an existing model. * @param object $importRules * @param array $rowData * @param array $mappingData * @param object $importRowDataResultsUtil */ public static function importByImportRulesRowData(ImportRules $importRules, $rowBean, $mappingData, ImportRowDataResultsUtil $importRowDataResultsUtil, ExplicitReadWriteModelPermissions $explicitReadWriteModelPermissions) { assert('$rowBean instanceof RedBean_OODBBean'); assert('is_array($mappingData)'); $makeNewModel = true; $modelClassName = $importRules->getModelClassName(); $externalSystemId = null; $importSanitizeResultsUtil = new ImportSanitizeResultsUtil(); $afterSaveActionsData = array(); //Process the 'id' column first if available. if (false !== ($idColumnName = static::getIdColumnNameByMappingData($mappingData))) { $columnMappingData = $mappingData[$idColumnName]; $attributeImportRules = AttributeImportRulesFactory::makeByImportRulesTypeAndAttributeIndexOrDerivedType($importRules::getType(), $columnMappingData['attributeIndexOrDerivedType']); $valueReadyToSanitize = static::resolveValueToSanitizeByValueAndColumnType($rowBean->{$idColumnName}, $columnMappingData['type']); $attributeValueData = $attributeImportRules->resolveValueForImport($valueReadyToSanitize, $idColumnName, $columnMappingData, $importSanitizeResultsUtil); assert('count($attributeValueData) == 0 || count($attributeValueData) == 1'); if (isset($attributeValueData['id']) && $attributeValueData['id'] != null) { $model = $modelClassName::getById($attributeValueData['id']); $makeNewModel = false; } elseif (isset($attributeValueData[ExternalSystemIdUtil::EXTERNAL_SYSTEM_ID_COLUMN_NAME]) && $attributeValueData[ExternalSystemIdUtil::EXTERNAL_SYSTEM_ID_COLUMN_NAME] != null) { $externalSystemId = $attributeValueData[ExternalSystemIdUtil::EXTERNAL_SYSTEM_ID_COLUMN_NAME]; } } if ($makeNewModel) { $model = new $modelClassName(); $model->setScenario('importModel'); } //Process the rest of the mapped colummns. ignoring owner. foreach ($mappingData as $columnName => $columnMappingData) { if ($columnMappingData['attributeIndexOrDerivedType'] != null && $columnMappingData['attributeIndexOrDerivedType'] != 'owner' && $idColumnName != $columnName) { static::sanitizeValueAndPopulateModel($rowBean, $importRules, $model, $columnName, $modelClassName, $columnMappingData, $importSanitizeResultsUtil, $afterSaveActionsData); } } //Process the owner column if present foreach ($mappingData as $columnName => $columnMappingData) { if ($columnMappingData['attributeIndexOrDerivedType'] != null && $columnMappingData['attributeIndexOrDerivedType'] == 'owner' && $idColumnName != $columnName) { static::sanitizeValueAndPopulateModel($rowBean, $importRules, $model, $columnName, $modelClassName, $columnMappingData, $importSanitizeResultsUtil, $afterSaveActionsData); } } $validated = $model->validate(); if ($validated && $importSanitizeResultsUtil->shouldSaveModel()) { $saved = $model->save(); if ($saved) { static::processAfterSaveActions($afterSaveActionsData, $model); if ($externalSystemId != null) { ExternalSystemIdUtil::updateByModel($model, $externalSystemId); } $importRowDataResultsUtil->addMessage(Zurmo::t('ImportModule', '{modelLabel} saved correctly: {linkToModel}', array('{modelLabel}' => $model->getModelLabelByTypeAndLanguage('Singular'), '{linkToModel}' => static::resolveLinkMessageToModel($model)))); if ($makeNewModel) { if ($model instanceof SecurableItem) { try { $resolved = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($model, $explicitReadWriteModelPermissions); $importRowDataResultsUtil->setStatusToCreated(); if (!$resolved) { $importRowDataResultsUtil->addMessage('The record saved, but there was a problem ' . 'setting the security permissions. It will at least be viewable by the owner.'); $importRowDataResultsUtil->setStatusToError(); } } catch (AccessDeniedSecurityException $e) { $importRowDataResultsUtil->addMessage('The record saved, but you do not have permissions ' . 'to set the security the way you did. The record will only be viewable by the owner.'); $importRowDataResultsUtil->setStatusToError(); } } else { $importRowDataResultsUtil->setStatusToCreated(); } } else { $importRowDataResultsUtil->setStatusToUpdated(); } } else { $importRowDataResultsUtil->addMessage('The record failed to save. Reason unknown.'); $importRowDataResultsUtil->setStatusToError(); } } else { if (!$importSanitizeResultsUtil->shouldSaveModel()) { $importRowDataResultsUtil->addMessages($importSanitizeResultsUtil->getMessages()); } $messages = RedBeanModelErrorsToMessagesUtil::makeMessagesByModel($model); if (count($messages) > 0) { $importRowDataResultsUtil->addMessages($messages); } $importRowDataResultsUtil->setStatusToError(); } }
/** * Get the array of attributes that cannot be mapped when using these import rules. * @return array */ public static function getNonImportableAttributeNames() { return array_merge(parent::getNonImportableAttributeNames(), array('state', 'account')); }
/** * Used for testing. */ public static function resetCache() { self::$attributeImportRulesDataByModelAndImportRulesClassName = null; }
/** * Get the array of attributes that cannot be mapped when using these import rules. * @return array */ public static function getNonImportableAttributeNames() { return array_merge(parent::getNonImportableAttributeNames(), array('contact', 'opportunity', 'productTemplate')); }
/** * Override to block out additional attributes that are not importable * @return array */ public static function getNonImportableAttributeNames() { return array_merge(parent::getNonImportableAttributeNames(), array('currency', 'isActive', 'language', 'locale', 'timeZone', 'manager', 'hash', 'createdByUser', 'modifiedByUser', 'createdDateTime', 'modifiedDateTime')); }
/** * Override to block out additional attributes that are not importable * @return array */ public static function getNonImportableAttributeNames() { return array_merge(parent::getNonImportableAttributeNames(), array('isActive', 'hash', 'createdByUser', 'modifiedByUser', 'createdDateTime', 'modifiedDateTime', 'isRootUser', 'isSystemUser', 'primaryAddress__latitude', 'primaryAddress__longitude', 'primaryAddress__invalid', 'hideFromSelecting', 'hideFromLeaderboard', 'serializedAvatarData')); }
public static function getNonImportableAttributeNames() { return array_merge(parent::getNonImportableAttributeNames(), array('billingAddress__latitude', 'billingAddress__longitude', 'billingAddress__invalid', 'shippingAddress__latitude', 'shippingAddress__longitude', 'shippingAddress__invalid')); }