public static function setUpBeforeClass()
 {
     parent::setUpBeforeClass();
     ImportRules::resetCache();
     SecurityTestHelper::createSuperAdmin();
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
 }
Ejemplo n.º 2
0
 /**
  * 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'));
 }
Ejemplo n.º 4
0
 /**
  * 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);
 }
Ejemplo n.º 6
0
 /**
  * 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();
     }
 }
Ejemplo n.º 7
0
 /**
  * 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'));
 }
Ejemplo n.º 8
0
 /**
  * Used for testing.
  */
 public static function resetCache()
 {
     self::$attributeImportRulesDataByModelAndImportRulesClassName = null;
 }
Ejemplo n.º 9
0
 /**
  * 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'));
 }
Ejemplo n.º 10
0
 /**
  * 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'));
 }
Ejemplo n.º 11
0
 /**
  * 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'));
 }