public static function getUserExternalSystemIds() { $columnName = ExternalSystemIdUtil::EXTERNAL_SYSTEM_ID_COLUMN_NAME; RedBeanColumnTypeOptimizer::externalIdColumn(User::getTableName('User'), $columnName); $sql = 'select ' . $columnName . ' from ' . User::getTableName('User'); return R::getCol($sql); }
public static function setUpBeforeClass() { parent::setUpBeforeClass(); $super = SecurityTestHelper::createSuperAdmin(); Yii::app()->user->userModel = $super; $jim = UserTestHelper::createBasicUser('jim'); $values = array('Test1', 'Test2', 'Test3', 'Sample', 'Demo'); $customFieldData = CustomFieldData::getByName('ImportTestDropDown'); $customFieldData->serializedData = serialize($values); $saved = $customFieldData->save(); assert($saved); // Not Coding Standard $values = array('Multi 1', 'Multi 2', 'Multi 3'); $customFieldData = CustomFieldData::getByName('ImportTestMultiDropDown'); $customFieldData->serializedData = serialize($values); $saved = $customFieldData->save(); assert($saved); // Not Coding Standard $values = array('Cloud 1', 'Cloud 2', 'Cloud 3'); $customFieldData = CustomFieldData::getByName('ImportTestTagCloud'); $customFieldData->serializedData = serialize($values); $saved = $customFieldData->save(); assert($saved); // Not Coding Standard //Ensure the external system id column is present. $columnName = ExternalSystemIdUtil::EXTERNAL_SYSTEM_ID_COLUMN_NAME; RedBeanColumnTypeOptimizer::externalIdColumn(User::getTableName('User'), $columnName); $userTableName = User::getTableName('User'); R::exec("update " . $userTableName . " set {$columnName} = 'A' where id = {$super->id}"); R::exec("update " . $userTableName . " set {$columnName} = 'B' where id = {$jim->id}"); RedBeanColumnTypeOptimizer::externalIdColumn(ImportModelTestItem::getTableName('ImportModelTestItem'), $columnName); RedBeanColumnTypeOptimizer::externalIdColumn(ImportModelTestItem2::getTableName('ImportModelTestItem2'), $columnName); RedBeanColumnTypeOptimizer::externalIdColumn(ImportModelTestItem3::getTableName('ImportModelTestItem3'), $columnName); RedBeanColumnTypeOptimizer::externalIdColumn(ImportModelTestItem4::getTableName('ImportModelTestItem4'), $columnName); }
/** * Given a model and external system id, update the external system id in the database for that model * @param object $model * @param string $externalSystemId */ public static function updateByModel(RedBeanModel $model, $externalSystemId) { assert('$externalSystemId == null || is_string($externalSystemId)'); $columnName = self::EXTERNAL_SYSTEM_ID_COLUMN_NAME; $tableName = $model::getTableName(get_class($model)); RedBeanColumnTypeOptimizer::externalIdColumn($tableName, $columnName); R::exec("update " . $tableName . " set {$columnName} = '" . $externalSystemId . "' where id = " . $model->id); }
public static function setUpBeforeClass() { parent::setUpBeforeClass(); $super = SecurityTestHelper::createSuperAdmin(); Yii::app()->user->userModel = $super; $accountTableName = Account::getTableName('Account'); $contactTableName = Contact::getTableName('Contact'); $opportunityTableName = Opportunity::getTableName('Opportunity'); $columnName = ExternalSystemIdUtil::EXTERNAL_SYSTEM_ID_COLUMN_NAME; RedBeanColumnTypeOptimizer::externalIdColumn($accountTableName, $columnName); RedBeanColumnTypeOptimizer::externalIdColumn($contactTableName, $columnName); RedBeanColumnTypeOptimizer::externalIdColumn($opportunityTableName, $columnName); }
public static function setUpBeforeClass() { parent::setUpBeforeClass(); $super = SecurityTestHelper::createSuperAdmin(); Yii::app()->user->userModel = $super; $columnName = ExternalSystemIdUtil::EXTERNAL_SYSTEM_ID_COLUMN_NAME; RedBeanColumnTypeOptimizer::externalIdColumn(ImportModelTestItem::getTableName('Account'), $columnName); RedBeanColumnTypeOptimizer::externalIdColumn(ImportModelTestItem2::getTableName('Contact'), $columnName); RedBeanColumnTypeOptimizer::externalIdColumn(ImportModelTestItem3::getTableName('Opportunity'), $columnName); $account = AccountTestHelper::createAccountByNameForOwner('testAccount', $super); ImportTestHelper::updateModelsExternalId($account, 'ACC'); $contact = ContactTestHelper::createContactByNameForOwner('testContact', $super); ImportTestHelper::updateModelsExternalId($contact, 'CON'); $opportunity = OpportunityTestHelper::createOpportunityByNameForOwner('testOpportunity', $super); ImportTestHelper::updateModelsExternalId($opportunity, 'OPP'); }
public function onEvent($type, $info) { assert('$type == "update"'); if (RedBeanDatabase::isFrozen()) { return; } $hints = $info->getMeta("hint"); if ($hints !== null) { assert('is_array($hints)'); foreach ($hints as $key => $value) { if (in_array($value, array('blob', 'longblob', 'boolean', 'date', 'datetime', 'string', 'text', 'longtext', 'id'))) { RedBeanColumnTypeOptimizer::optimize($info->getMeta("type"), $key, $value); } } } }
public function save($runValidation = true) { foreach ($this->deferredRelateBeans as $bean) { R::associate($this->bean, $bean); if (!RedBeanDatabase::isFrozen()) { $types = array($this->bean->getMeta("type"), $bean->getMeta("type")); sort($types); $tableName = implode("_", $types); foreach ($types as $type) { $columnName = "{$type}_id"; RedBeanColumnTypeOptimizer::optimize($tableName, $columnName, 'id'); } } } $this->deferredRelateBeans = array(); foreach ($this->deferredUnrelateBeans as $bean) { R::unassociate($this->bean, $bean); } $this->deferredUnrelateBeans = array(); return true; }
protected function linkBeans() { $baseModelClassName = null; $baseBean = null; foreach ($this->modelClassNameToBean as $modelClassName => $bean) { if ($baseBean !== null) { ZurmoRedBeanLinkManager::link($bean, $baseBean); if (!RedBeanDatabase::isFrozen()) { $tableName = self::getTableName($modelClassName); $columnName = self::getTableName($baseModelClassName) . '_id'; RedBeanColumnTypeOptimizer::optimize($tableName, $columnName, 'id'); } } $baseModelClassName = $modelClassName; $baseBean = $bean; } }
public function setUp() { parent::setUp(); RedBeanColumnTypeOptimizer::$optimizedTableColumns = array(); Yii::app()->gameHelper->resetDeferredPointTypesAndValuesByUserIdToAdd(); }
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)); }
public function save($runValidation = true) { if (!parent::save($runValidation)) { return false; } foreach ($this->deferredRelateBeans as $bean) { if ($this->linkType == RedBeanModel::LINK_TYPE_POLYMORPHIC) { if ($this->bean->id == null) { R::store($this->bean); } $polyIdFieldName = strtolower($this->linkName) . '_id'; $polyTypeFieldName = strtolower($this->linkName) . '_type'; $bean->{$polyTypeFieldName} = $this->bean->getMeta('type'); $bean->{$polyIdFieldName} = $this->bean->id; if (!RedBeanDatabase::isFrozen()) { $tableName = RedBeanModel::getTableName($this->modelClassName); RedBeanColumnTypeOptimizer::optimize($tableName, $polyIdFieldName, 'id'); } } else { ZurmoRedBeanLinkManager::link($bean, $this->bean, $this->resolveLinkNameForCasing()); if (!RedBeanDatabase::isFrozen()) { $tableName = RedBeanModel::getTableName($this->modelClassName); $columnName = RedBeanModel::getTableName($this->relatedModelClassName) . '_id'; $columnName = ZurmoRedBeanLinkManager::resolveColumnPrefix($this->resolveLinkNameForCasing()) . $columnName; RedBeanColumnTypeOptimizer::optimize($tableName, $columnName, 'id'); } } R::store($bean); } $this->deferredRelateBeans = array(); $tableName = RedBeanModel::getTableName($this->relatedModelClassName); foreach ($this->deferredUnrelateBeans as $bean) { if (!$this->owns) { ZurmoRedBeanLinkManager::breakLink($bean, $tableName, $this->resolveLinkNameForCasing()); R::store($bean); } else { R::trash($bean); } } $this->deferredUnrelateBeans = array(); return true; }
public static function logAuditEvent($moduleName, $eventName, $data = null, RedBeanModel $model = null, User $user = null) { assert('is_string($moduleName) && $moduleName != ""'); assert('is_string($eventName) && $eventName != ""'); if ($user === null) { $user = Yii::app()->user->userModel; if (!$user instanceof User) { throw new NoCurrentUserSecurityException(); } } if ($eventName == "Item Viewed") { AuditEventsRecentlyViewedUtil::resolveNewRecentlyViewedModel($data[1], $model, AuditEventsRecentlyViewedUtil::RECENTLY_VIEWED_COUNT + 1); } if ($eventName == "Item Deleted") { $modelClassName = get_class($model); AuditEventsRecentlyViewedUtil::deleteModelFromRecentlyViewed($modelClassName::getModuleClassName(), $model); } if (!AuditEvent::$isTableOptimized && (!AUDITING_OPTIMIZED || !RedBeanDatabase::isFrozen())) { $tableName = self::getTableName('AuditEvent'); RedBeanColumnTypeOptimizer::optimize($tableName, strtolower('modelId'), 'id'); $auditEvent = new AuditEvent(); $auditEvent->dateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time()); $auditEvent->moduleName = $moduleName; $auditEvent->eventName = $eventName; $auditEvent->user = $user; $auditEvent->modelClassName = $model !== null ? get_class($model) : null; $auditEvent->modelId = $model !== null ? $model->id : null; $auditEvent->serializedData = serialize($data); $saved = $auditEvent->save(); AuditEvent::$isTableOptimized = true; } else { $sql = "insert into auditevent (datetime,\n modulename,\n eventname,\n _user_id,\n modelclassname,\n modelid,\n serializeddata)\n values ('" . DateTimeUtil::convertTimestampToDbFormatDateTime(time()) . "',\n '{$moduleName}',\n '{$eventName}',\n {$user->id}, " . ($model !== null ? "'" . get_class($model) . "', " : 'null, ') . ($model !== null ? "{$model->id}, " : 'null, ') . ":data)"; R::exec($sql, array('data' => serialize($data))) !== null; $saved = true; } return $saved; }
protected function linkBeans() { // Link the beans up the inheritance hierarchy, skipping // the person bean, then link that to the user. So the // user is linked to both the person and the permitable, // to complete the mixing in of the Person's data. $baseBean = null; foreach ($this->modelClassNameToBean as $modelClassName => $bean) { if ($modelClassName == 'Person') { continue; } if ($baseBean !== null) { ZurmoRedBeanLinkManager::link($bean, $baseBean); if (!RedBeanDatabase::isFrozen()) { $tableName = self::getTableName(get_class($this)); $columnName = 'person_id'; RedBeanColumnTypeOptimizer::optimize($tableName, $columnName, 'id'); } } $baseBean = $bean; } $userBean = $this->modelClassNameToBean['User']; $personBean = $this->modelClassNameToBean['Person']; ZurmoRedBeanLinkManager::link($userBean, $personBean); if (!RedBeanDatabase::isFrozen()) { $tableName = self::getTableName(get_class($this)); RedBeanColumnTypeOptimizer::optimize($tableName, 'person_id', 'id'); } }
/** * @see LinkedToMappingRuleDataAnalyzerInterface::runAndMakeMessages() */ public function runAndMakeMessages(AnalyzerSupportedDataProvider $dataProvider, $columnName, $mappingRuleType, $mappingRuleData) { assert('is_string($columnName)'); assert('is_string($mappingRuleType)'); assert('is_array($mappingRuleData)'); $this->ensureTypeValueIsValid($mappingRuleData["type"]); $this->type = $mappingRuleData["type"]; if ($this->type == IdValueTypeMappingRuleForm::EXTERNAL_SYSTEM_ID) { $modelClassName = $this->attributeModelClassName; $tableColumnName = ExternalSystemIdUtil::EXTERNAL_SYSTEM_ID_COLUMN_NAME; RedBeanColumnTypeOptimizer::externalIdColumn($modelClassName::getTableName($modelClassName), $tableColumnName, $this->externalSystemIdMaxLength); } $this->processAndMakeMessage($dataProvider, $columnName); }
protected function init() { parent::init(); $modelClassName = $this->modelClassName; $model = new $modelClassName(false); $this->attributeModelClassName = $this->resolveAttributeModelClassName($model, $this->attributeName); $this->ensureTypeValueIsValid($this->mappingRuleData["type"]); if ($this->mappingRuleData["type"] == IdValueTypeMappingRuleForm::EXTERNAL_SYSTEM_ID) { $modelClassName = $this->attributeModelClassName; $tableColumnName = ExternalSystemIdUtil::EXTERNAL_SYSTEM_ID_COLUMN_NAME; RedBeanColumnTypeOptimizer::externalIdColumn($modelClassName::getTableName($modelClassName), $tableColumnName, $this->externalSystemIdMaxLength); } }
public function setup() { RedBeanDatabase::close(); RedBeanColumnTypeOptimizer::$optimizedTableColumns = array(); }