public function testSavingTwiceWithAModelThatHasACurrencyValueAsARelation()
 {
     if (!RedBeanDatabase::isFrozen()) {
         Yii::app()->user->userModel = User::getByUsername('super');
         $testItem = new OwnedSecurableTestItem();
         $testItem->member = 'test';
         $saved = $testItem->save();
         $this->assertTrue($saved);
         //Because OwnedSecurableTestItem as a relatedCurrency, there are some strange issues with saving again.
         //It creates currency validation issues for any of the related users like owner, modifiedUser etc.
         //Need to investigate further to fix.
         //$testItem->forget();
         //$testItem = OwnedSecurableTestItem::getById($testItem->id);
         //Save again immediately after.
         $validated = $testItem->validate();
         // echo "<pre>";
         // print_r($testItem->getErrors());
         // echo "</pre>";
         $this->assertTrue($validated);
         $saved = $testItem->save();
         $this->assertTrue($saved);
         //Reset count of test items to 0.
         $testItem->delete();
     }
 }
 public function onEvent($type, $info)
 {
     assert('$type == "after_update"');
     if (RedBeanDatabase::isFrozen()) {
         return;
     }
     $hints = $info->getMeta("hint");
     if ($hints !== null) {
         assert('is_array($hints)');
         foreach ($hints as $key => $value) {
             switch ($value) {
                 case 'date':
                     $this->dateOptimizer->setTable($info->getMeta("type"));
                     $this->dateOptimizer->setColumn($key);
                     $this->dateOptimizer->setValue($info->{$key});
                     $this->dateOptimizer->optimize();
                     break;
                 case 'datetime':
                     $this->datetimeOptimizer->setTable($info->getMeta("type"));
                     $this->datetimeOptimizer->setColumn($key);
                     $this->datetimeOptimizer->setValue($info->{$key});
                     $this->datetimeOptimizer->optimize();
                     break;
                 case 'id':
                     $this->idOptimizer->setTable($info->getMeta("type"));
                     $this->idOptimizer->setColumn($key);
                     $this->idOptimizer->setValue($info->{$key});
                     $this->idOptimizer->optimize();
                     break;
             }
         }
     }
 }
 public function testSaveModelFromPostSuccessfulSave()
 {
     //Unfreeze since the test model is not part of the standard schema.
     $freezeWhenComplete = false;
     if (RedBeanDatabase::isFrozen()) {
         RedBeanDatabase::unfreeze();
         $freezeWhenComplete = true;
     }
     Yii::app()->user->userModel = User::getByUsername('super');
     $savedSuccessfully = false;
     $modelToStringValue = null;
     $postData = array('member' => 'abc');
     $model = new OwnedSecurableTestItem();
     $this->assertFalse($model->hasErrors());
     $controllerUtil = new ZurmoControllerUtil();
     $model = $controllerUtil->saveModelFromPost($postData, $model, $savedSuccessfully, $modelToStringValue);
     $this->assertTrue($savedSuccessfully);
     $this->assertEquals('abc', $modelToStringValue);
     $this->assertFalse($model->hasErrors());
     $this->assertTrue($model->id > 0);
     //Re-freeze if needed.
     if ($freezeWhenComplete) {
         RedBeanDatabase::freeze();
     }
 }
 public function setup()
 {
     parent::setUp();
     $freeze = false;
     if (RedBeanDatabase::isFrozen()) {
         RedBeanDatabase::unfreeze();
         $freeze = true;
     }
     $this->freeze = $freeze;
 }
 public static function setUpBeforeClass()
 {
     parent::setUpBeforeClass();
     SecurityTestHelper::createSuperAdmin();
     if (!RedBeanDatabase::isFrozen()) {
         // TODO: @Shoaibi: High: get rid of this for God's sake.
         $campaignItem = CampaignItemTestHelper::createCampaignItem(0);
         $campaignItem->delete();
     }
 }
 public function setUp()
 {
     parent::setUp();
     Yii::app()->user->userModel = User::getByUsername('super');
     $freeze = false;
     if (RedBeanDatabase::isFrozen()) {
         RedBeanDatabase::unfreeze();
         $freeze = true;
     }
     $this->freeze = $freeze;
 }
 public function setup()
 {
     parent::setUp();
     Yii::app()->user->userModel = User::getByUsername('super');
     DisplayAttributeForReportForm::resetCount();
     $freeze = false;
     if (RedBeanDatabase::isFrozen()) {
         RedBeanDatabase::unfreeze();
         $freeze = true;
     }
     $this->freeze = $freeze;
 }
 public function onEvent($type, $info)
 {
     assert('$type == "sql_exec"');
     if (!RedBeanDatabase::isFrozen()) {
         return;
     }
     //echo "<pre>";
     //print_r($info->getSQL());
     //echo "</pre>";
     //now we can count total queries, how many time the same query is run,
     //if we want to do db timings we would need to do this from a different listener. (actually not sure how this will work...)
 }
Exemple #9
0
 public function setUp()
 {
     parent::setUp();
     if (strlen(Yii::app()->params['testApiUrl']) > 0) {
         $this->serverUrl = Yii::app()->params['testApiUrl'];
     }
     $freeze = false;
     if (RedBeanDatabase::isFrozen()) {
         RedBeanDatabase::unfreeze();
         $freeze = true;
     }
     $this->freeze = $freeze;
 }
Exemple #10
0
 public static function tearDownAfterClass()
 {
     if (RedBeanDatabase::isFrozen()) {
         TestDatabaseUtil::deleteRowsFromAllTablesExceptLog();
     } else {
         TestDatabaseUtil::deleteAllTablesExceptLog();
     }
     RedBeanModel::forgetAll();
     RedBeanDatabase::close();
     assert('!RedBeanDatabase::isSetup()');
     // Not Coding Standard
     GeneralCache::forgetAll();
 }
 public function setup()
 {
     parent::setUp();
     Yii::app()->user->userModel = User::getByUsername('super');
     DisplayAttributeForReportForm::resetCount();
     ModelRelationsAndAttributesToSummableReportAdapter::forgetAll();
     ModelRelationsAndAttributesToRowsAndColumnsReportAdapter::forgetAll();
     ModelRelationsAndAttributesToMatrixReportAdapter::forgetAll();
     $freeze = false;
     if (RedBeanDatabase::isFrozen()) {
         RedBeanDatabase::unfreeze();
         $freeze = true;
     }
     $this->freeze = $freeze;
 }
Exemple #12
0
 public function testResolveModelsHasManyFilesFromPost()
 {
     if (!RedBeanDatabase::isFrozen()) {
         Yii::app()->user->userModel = User::getByUsername('super');
         $fileCount = count(FileModel::getAll());
         $this->assertEquals(0, $fileCount);
         $file1 = ZurmoTestHelper::createFileModel();
         $file2 = ZurmoTestHelper::createFileModel();
         $file3 = ZurmoTestHelper::createFileModel();
         $model = new ModelWithAttachmentTestItem();
         $_POST['myTest'] = array($file1->id, $file2->id, $file3->id);
         FileModelUtil::resolveModelsHasManyFilesFromPost($model, 'files', 'myTest');
         $model->member = 'test';
         $saved = $model->save();
         $this->assertTrue($saved);
         $fileCount = count(FileModel::getAll());
         $this->assertEquals(3, $fileCount);
         $modelId = $model->id;
         $model->forget();
         $model = ModelWithAttachmentTestItem::getById($modelId);
         $this->assertEquals(3, $model->files->count());
         //Add a fourth file.
         $file4 = ZurmoTestHelper::createFileModel();
         $_POST['myTest'] = array($file1->id, $file2->id, $file3->id, $file4->id);
         FileModelUtil::resolveModelsHasManyFilesFromPost($model, 'files', 'myTest');
         $saved = $model->save();
         $this->assertTrue($saved);
         $fileCount = count(FileModel::getAll());
         $this->assertEquals(4, $fileCount);
         $model->forget();
         $model = ModelWithAttachmentTestItem::getById($modelId);
         $this->assertEquals(4, $model->files->count());
         //Remove the 2nd file.
         $_POST['myTest'] = array($file1->id, $file3->id, $file4->id);
         FileModelUtil::resolveModelsHasManyFilesFromPost($model, 'files', 'myTest');
         $saved = $model->save();
         $this->assertTrue($saved);
         $fileCount = count(FileModel::getAll());
         $this->assertEquals(3, $fileCount);
         $model->forget();
         $model = ModelWithAttachmentTestItem::getById($modelId);
         $this->assertEquals(3, $model->files->count());
         $compareIds = array($file1->id, $file3->id, $file4->id);
         foreach ($model->files as $fileModel) {
             $this->assertTrue(in_array($fileModel->id, $compareIds));
         }
     }
 }
 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 testSequentialProcessViewFactory()
 {
     Yii::app()->user->userModel = User::getByUsername('super');
     $freezeWhenComplete = false;
     //Unfreeze since the test model is not part of the standard schema.
     if (RedBeanDatabase::isFrozen()) {
         RedBeanDatabase::unfreeze();
         $freezeWhenComplete = true;
     }
     $testModels = ImportModelTestItem::getAll();
     $this->assertEquals(0, count($testModels));
     $import = new Import();
     $mappingData = array('column_0' => array('attributeIndexOrDerivedType' => 'string', 'type' => 'importColumn', 'mappingRulesData' => array('DefaultValueModelAttributeMappingRuleForm' => array('defaultValue' => null))), 'column_23' => array('attributeIndexOrDerivedType' => 'FullName', 'type' => 'importColumn', 'mappingRulesData' => array('FullNameDefaultValueModelAttributeMappingRuleForm' => array('defaultValue' => null))));
     $serializedData['importRulesType'] = 'ImportModelTestItem';
     $serializedData['mappingData'] = $mappingData;
     $serializedData['firstRowIsHeaderRow'] = true;
     $import->serializedData = serialize($serializedData);
     $this->assertTrue($import->save());
     ImportTestHelper::createTempTableByFileNameAndTableName('importAnalyzerTest.csv', $import->getTempTableName());
     $config = array('pagination' => array('pageSize' => 2));
     $dataProvider = new ImportDataProvider($import->getTempTableName(), true, $config);
     $sequentialProcess = new ImportCreateUpdateModelsSequentialProcess($import, $dataProvider);
     $sequentialProcess->run(null, null);
     $route = 'default/someAction';
     $view = SequentialProcessViewFactory::makeBySequentialProcess($sequentialProcess, $route);
     $content = $view->render();
     $this->assertNotNull($content);
     $this->assertEquals('SequentialProcessView', get_class($view));
     $this->assertEquals('processRows', $sequentialProcess->getNextStep());
     //Now process the first run. Will process page 0.
     $sequentialProcess = new ImportCreateUpdateModelsSequentialProcess($import, $dataProvider);
     $sequentialProcess->run('processRows', null);
     $route = 'default/someAction';
     $view = SequentialProcessViewFactory::makeBySequentialProcess($sequentialProcess, $route);
     $content = $view->render();
     $this->assertNotNull($content);
     $this->assertEquals('SequentialProcessView', get_class($view));
     $this->assertEquals(array('page' => 1), $sequentialProcess->getNextParams());
     //Confirm 2 models were successfully added.
     $testModels = ImportModelTestItem::getAll();
     $this->assertEquals(2, count($testModels));
     //Re-freeze if needed.
     if ($freezeWhenComplete) {
         RedBeanDatabase::freeze();
     }
 }
 /**
  * Make sure the query actually runs correctly.
  */
 public function testASingleAttributeThatRunsFrozenQueryCorrectly()
 {
     if (RedBeanDatabase::isFrozen()) {
         $q = DatabaseCompatibilityUtil::getQuote();
         $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('ReportModelTestItem');
         $builder = new FiltersReportQueryBuilder($joinTablesAdapter, '1');
         $filter = new FilterForReportForm('AccountsModule', 'Account', Report::TYPE_ROWS_AND_COLUMNS);
         $filter->attributeIndexOrDerivedType = 'ReadOptimization';
         $content = $builder->makeQueryContent(array($filter));
         $compareContent = "({$q}ownedsecurableitem{$q}.{$q}securableitem_id{$q} = (select securableitem_id " . "from {$q}account_read{$q} where {$q}securableitem_id{$q} = {$q}ownedsecurableitem" . "{$q}.{$q}securableitem_id{$q} and {$q}munge_id{$q} in ('U" . self::$superUserId . "', 'G" . self::$everyoneGroupId . "') limit 1))";
         $this->assertEquals($compareContent, $content);
         $this->assertEquals(1, $joinTablesAdapter->getFromTableJoinCount());
         $this->assertEquals(0, $joinTablesAdapter->getLeftTableJoinCount());
         $selectQueryAdapter = new RedBeanModelSelectQueryAdapter();
         $selectQueryAdapter->addClause(Account::getTableName('Account'), 'id');
         $sql = SQLQueryUtil::makeQuery(Account::getTableName('Account'), $selectQueryAdapter, $joinTablesAdapter, null, null, $content, null, null);
         $rows = R::getAll($sql);
         $this->assertEquals(0, count($rows));
     }
 }
 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;
 }
 /**
  * Given a file resource, convert the file into a database table based on the table name provided.
  * Assumes the file is a csv.
  * @param resource $fileHandle
  * @param string $tableName
  * @return true on success.
  */
 public static function makeDatabaseTableByFileHandleAndTableName($fileHandle, $tableName, $delimiter = ',', $enclosure = "'")
 {
     assert('gettype($fileHandle) == "resource"');
     assert('is_string($tableName)');
     assert('$tableName == strtolower($tableName)');
     assert('$delimiter != null && is_string($delimiter)');
     assert('$enclosure != null && is_string($enclosure)');
     $freezeWhenComplete = false;
     if (RedBeanDatabase::isFrozen()) {
         RedBeanDatabase::unfreeze();
         $freezeWhenComplete = true;
     }
     R::exec("drop table if exists {$tableName}");
     $columns = self::optimizeTableImportColumnsAndGetColumnNames($fileHandle, $tableName, $delimiter, $enclosure);
     rewind($fileHandle);
     self::convertCsvIntoRowsInTable($fileHandle, $tableName, $delimiter, $enclosure, $columns);
     self::optimizeTableNonImportColumns($tableName);
     if ($freezeWhenComplete) {
         RedBeanDatabase::freeze();
     }
     return true;
 }
 protected static function decrementParentRolesCountsForAllSecurableItems($mungeTableName, Role $role)
 {
     assert('is_string($mungeTableName) && $mungeTableName != ""');
     if (!RedBeanDatabase::isFrozen() && $role->role->isSame($role)) {
         return;
     }
     if ($role->role->id > 0) {
         self::decrementCountForAllSecurableItems($mungeTableName, $role->role);
         self::decrementParentRolesCountsForAllSecurableItems($mungeTableName, $role->role);
     }
 }
 /**
  * @depends testAutoBuildDatabase
  */
 public function testAutoBuildUpgrade()
 {
     $this->unfreezeWhenDone = false;
     if (RedBeanDatabase::isFrozen()) {
         RedBeanDatabase::unfreeze();
         $this->unfreezeWhenDone = true;
     }
     // adding Text Field
     $metadata = Account::getMetadata();
     $metadata['Account']['members'][] = 'newField';
     $rules = array('newField', 'type', 'type' => 'string');
     $metadata['Account']['rules'][] = $rules;
     $metadata['Account']['members'][] = 'string128';
     $rules = array('string128', 'type', 'type' => 'string');
     $metadata['Account']['rules'][] = $rules;
     $rules = array('string128', 'length', 'min' => 3, 'max' => 128);
     $metadata['Account']['rules'][] = $rules;
     $metadata['Account']['members'][] = 'string555';
     $rules = array('string555', 'type', 'type' => 'string');
     $metadata['Account']['rules'][] = $rules;
     $rules = array('string555', 'length', 'min' => 1, 'max' => 555);
     $metadata['Account']['rules'][] = $rules;
     $metadata['Account']['members'][] = 'string100000';
     $rules = array('string100000', 'type', 'type' => 'string');
     $metadata['Account']['rules'][] = $rules;
     $rules = array('string100000', 'length', 'min' => 1, 'max' => 100000);
     $metadata['Account']['rules'][] = $rules;
     $metadata['Account']['members'][] = 'textField';
     $rules = array('textField', 'type', 'type' => 'text');
     $metadata['Account']['rules'][] = $rules;
     $metadata['Account']['members'][] = 'longTextField';
     $rules = array('longTextField', 'type', 'type' => 'longtext');
     $metadata['Account']['rules'][] = $rules;
     $metadata['Account']['members'][] = 'dateField';
     $rules = array('dateField', 'type', 'type' => 'date');
     $metadata['Account']['rules'][] = $rules;
     $metadata['Account']['members'][] = 'booleanField';
     $rules = array('booleanField', 'boolean');
     $metadata['Account']['rules'][] = $rules;
     $metadata['Account']['members'][] = 'integerField';
     $rules = array('integerField', 'type', 'type' => 'integer');
     $metadata['Account']['rules'][] = $rules;
     $metadata['Account']['members'][] = 'dateTimeField';
     $rules = array('dateTimeField', 'type', 'type' => 'datetime');
     $metadata['Account']['rules'][] = $rules;
     $metadata['Account']['members'][] = 'urlField';
     $rules = array('urlField', 'url');
     $metadata['Account']['rules'][] = $rules;
     $metadata['Account']['members'][] = 'floatField';
     $rules = array('floatField', 'type', 'type' => 'float');
     $metadata['Account']['rules'][] = $rules;
     $metadata['Account']['members'][] = 'longTextField';
     $rules = array('longTextField', 'type', 'type' => 'longtext');
     $metadata['Account']['rules'][] = $rules;
     $metadata['Account']['members'][] = 'blobField';
     $rules = array('blobField', 'type', 'type' => 'blob');
     $metadata['Account']['rules'][] = $rules;
     $metadata['Account']['members'][] = 'longBlobField';
     $rules = array('longBlobField', 'type', 'type' => 'longblob');
     $metadata['Account']['rules'][] = $rules;
     Account::setMetadata($metadata);
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $messageLogger = new MessageLogger();
     $beforeRowCount = DatabaseCompatibilityUtil::getTableRowsCountTotal();
     InstallUtil::autoBuildDatabase($messageLogger);
     $afterRowCount = DatabaseCompatibilityUtil::getTableRowsCountTotal();
     $this->assertEquals($beforeRowCount, $afterRowCount);
     //Check Account fields
     $tableName = RedBeanModel::getTableName('Account');
     $columns = R::$writer->getColumns($tableName);
     $this->assertEquals('text', $columns['newfield']);
     $this->assertEquals('varchar(128)', $columns['string128']);
     $this->assertEquals('text', $columns['string555']);
     $this->assertEquals('longtext', $columns['string100000']);
     $this->assertEquals('text', $columns['textfield']);
     $this->assertEquals('date', $columns['datefield']);
     $this->assertEquals('tinyint(1)', $columns['booleanfield']);
     $this->assertEquals('int(11) unsigned', $columns['integerfield']);
     $this->assertEquals('datetime', $columns['datetimefield']);
     $this->assertEquals('varchar(255)', $columns['urlfield']);
     $this->assertEquals('double', $columns['floatfield']);
     $this->assertEquals('longtext', $columns['longtextfield']);
     $this->assertEquals('blob', $columns['blobfield']);
     $this->assertEquals('longblob', $columns['longblobfield']);
     $account = new Account();
     $account->name = 'Test Name';
     $account->owner = $super;
     $randomString = str_repeat("Aa", 64);
     $account->string128 = $randomString;
     $this->assertTrue($account->save());
     $metadata = Account::getMetadata();
     foreach ($metadata['Account']['rules'] as $key => $rule) {
         if ($rule[0] == 'string128' && $rule[1] == 'length') {
             $metadata['Account']['rules'][$key]['max'] = 64;
         }
     }
     Account::setMetadata($metadata);
     InstallUtil::autoBuildDatabase($messageLogger);
     RedBeanModel::forgetAll();
     $modifiedAccount = Account::getById($account->id);
     $this->assertEquals($randomString, $modifiedAccount->string128);
     //Check Account fields
     $tableName = RedBeanModel::getTableName('Account');
     $columns = R::$writer->getColumns($tableName);
     $this->assertEquals('varchar(128)', $columns['string128']);
 }
 /**
  * @depends testDrillDownDetails
  */
 public function testAutoComplete()
 {
     if (RedBeanDatabase::isFrozen()) {
         return;
     }
     $this->setGetArray(array('term' => 'a test', 'moduleClassName' => 'ReportsModule', 'type' => Report::TYPE_SUMMATION));
     $content = $this->runControllerWithNoExceptionsAndGetContent('reports/default/autoComplete');
     $this->assertEquals('[]', $content);
 }
Exemple #21
0
 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;
     }
 }
 /**
  * @depends testGetGlobalSearchResultsByPartialTermUsingScope
  */
 public function testGetGlobalSearchResultsByPartialTermWithRegularUserAndElevationStepsForRegularUser()
 {
     //Unfrozen, there are too many attributes that have to be columns in the database at this point, so
     //now this is just a frozen test.
     if (RedBeanDatabase::isFrozen()) {
         $super = User::getByUsername('super');
         $jimmy = User::getByUsername('jimmy');
         Yii::app()->user->userModel = $super;
         //Jimmy does not have read access, so he should not be able to see any results.
         $this->assertEquals(Right::DENY, $jimmy->getEffectiveRight('AccountsModule', AccountsModule::RIGHT_ACCESS_ACCOUNTS));
         $this->assertEquals(Right::DENY, $jimmy->getEffectiveRight('ContactsModule', ContactsModule::RIGHT_ACCESS_CONTACTS));
         $this->assertEquals(Right::DENY, $jimmy->getEffectiveRight('OpportunitiesModule', OpportunitiesModule::RIGHT_ACCESS_OPPORTUNITIES));
         Yii::app()->user->userModel = $jimmy;
         $data = ModelAutoCompleteUtil::getGlobalSearchResultsByPartialTerm('animal', 5, Yii::app()->user->userModel);
         $this->assertEquals(array(array('href' => '', 'label' => 'No Results Found', 'iconClass' => '')), $data);
         //Give Jimmy access to the module, he still will not be able to see results.
         Yii::app()->user->userModel = $super;
         $jimmy->setRight('AccountsModule', AccountsModule::RIGHT_ACCESS_ACCOUNTS);
         $jimmy->setRight('ContactsModule', ContactsModule::RIGHT_ACCESS_CONTACTS);
         $jimmy->setRight('LeadsModule', LeadsModule::RIGHT_ACCESS_LEADS);
         $jimmy->setRight('OpportunitiesModule', OpportunitiesModule::RIGHT_ACCESS_OPPORTUNITIES);
         $this->assertTrue($jimmy->save());
         Yii::app()->user->userModel = $jimmy;
         $data = ModelAutoCompleteUtil::getGlobalSearchResultsByPartialTerm('animal', 5, Yii::app()->user->userModel);
         $this->assertEquals(array(array('href' => '', 'label' => 'No Results Found', 'iconClass' => '')), $data);
         //Give Jimmy read on 1 model.  The search then should pick up this model.
         Yii::app()->user->userModel = $super;
         $accounts = Account::getByName('The Zoo');
         $this->assertEquals(1, count($accounts));
         $account = $accounts[0];
         $this->assertEquals(Permission::NONE, $account->getEffectivePermissions($jimmy));
         $account->addPermissions($jimmy, Permission::READ);
         $this->assertTrue($account->save());
         ReadPermissionsOptimizationUtil::securableItemGivenPermissionsForUser($account, $jimmy);
         Yii::app()->user->userModel = $jimmy;
         $data = ModelAutoCompleteUtil::getGlobalSearchResultsByPartialTerm('animal', 5, Yii::app()->user->userModel);
         $this->assertEquals(1, count($data));
         $this->assertEquals('The Zoo', $data[0]['label']);
         //Give Jimmy read on 2 more models.  The search then should pick up these models.
         Yii::app()->user->userModel = $super;
         $contacts = Contact::getByName('Big Elephant');
         $this->assertEquals(1, count($contacts));
         $contact = $contacts[0];
         $this->assertEquals(Permission::NONE, $contact->getEffectivePermissions($jimmy));
         $contact->addPermissions($jimmy, Permission::READ);
         $this->assertTrue($contact->save());
         ReadPermissionsOptimizationUtil::securableItemGivenPermissionsForUser($contact, $jimmy);
         $opportunities = Opportunity::getByName('Animal Crackers');
         $this->assertEquals(1, count($opportunities));
         $opportunity = $opportunities[0];
         $this->assertEquals(Permission::NONE, $opportunity->getEffectivePermissions($jimmy));
         $opportunity->addPermissions($jimmy, Permission::READ);
         $this->assertTrue($opportunity->save());
         ReadPermissionsOptimizationUtil::securableItemGivenPermissionsForUser($opportunity, $jimmy);
         Yii::app()->user->userModel = $jimmy;
         $data = ModelAutoCompleteUtil::getGlobalSearchResultsByPartialTerm('animal', 5, Yii::app()->user->userModel);
         $this->assertEquals(3, count($data));
         $this->assertEquals('The Zoo', $data[0]['label']);
         $this->assertEquals('Big Elephant', $data[1]['label']);
         $this->assertEquals('Animal Crackers', $data[2]['label']);
     }
 }
 public function disabled_testAShootLoadOfAccounts()
 {
     $freezeAfterFirst20 = false;
     $super = User::getByUsername('super');
     foreach (array(20, 50, 100, 200, 500, 1000, 10000, 100000, 200000) as $shootLoad) {
         echo "\nNuking existing accounts...\n";
         Yii::app()->user->userModel = $super;
         $this->nukeExistingAccounts();
         echo "Creating {$shootLoad} accounts...\n";
         echo " - Giving every 10th to Betty, giving Benny read\n";
         echo "   on overy 8th, and giving Sales Staff read on\n";
         echo "   every 12th.\n";
         list($time, $countThatBennyCanRead, $accountIdsThatBennyCanRead) = $this->createAccounts($shootLoad);
         echo 'Created accounts in ' . round($time, 1) . " seconds.\n";
         echo "Benny can read {$countThatBennyCanRead} of them.\n";
         echo 'The first few... ';
         for ($i = 0; $i < 10 && $i < count($accountIdsThatBennyCanRead); $i++) {
             echo "{$accountIdsThatBennyCanRead[$i]}|";
         }
         echo "\n";
         $startTime = microtime(true);
         ReadPermissionsOptimizationUtil::rebuild(true);
         $endTime = microtime(true);
         if ($this->isDebug()) {
             echo 'Rebuilt the munge in php in ' . round($endTime - $startTime, 1) . ' seconds, ' . self::getAccountMungeRowCount() . " rows.\n";
         }
         $phpRows = R::getAll('select munge_id, securableitem_id, count from account_read order by munge_id, securableitem_id, count');
         // If $securityOptimized is false in debug.php the second one will just do the php again.
         $startTime = microtime(true);
         ReadPermissionsOptimizationUtil::rebuild();
         $endTime = microtime(true);
         if ($this->isDebug()) {
             echo 'Rebuilt the munge ' . (SECURITY_OPTIMIZED ? 'optimized' : 'in php') . ' in ' . round($endTime - $startTime, 1) . ' seconds, ' . self::getAccountMungeRowCount() . " rows.\n";
         }
         $otherRows = R::getAll('select munge_id, securableitem_id, count from account_read order by munge_id, securableitem_id, count');
         if (count(array_diff($phpRows, $otherRows)) > 0) {
             echo "PHP & optimized munges don't match.\n";
             echo "--------\n";
             foreach ($phpRows as $row) {
                 echo join(', ', array_values($row)) . "\n";
             }
             echo "--------\n";
             foreach ($otherRows as $row) {
                 echo join(', ', array_values($row)) . "\n";
             }
             echo "--------\n";
         }
         $this->assertEquals(count($phpRows), count($otherRows));
         $this->assertEquals($phpRows, $otherRows);
         Yii::app()->user->userModel = User::getByUsername('benny');
         $count = Account::getCount();
         $startTime = microtime(true);
         $accounts = Account::getSubset(null, 0, 20);
         $endTime = microtime(true);
         echo 'As Benny retrieved 1 - ' . count($accounts) . " of {$count} in " . round($endTime - $startTime, 2) . " seconds.\n";
         unset($accounts);
         $offset = intval($count * 0.75);
         $startTime = microtime(true);
         $accounts = Account::getSubset(null, $offset, 20);
         $endTime = microtime(true);
         echo "As Benny retrieved {$offset} - " . ($offset + count($accounts)) . " of {$count} in " . round($endTime - $startTime, 3) . " seconds.\n";
         unset($accounts);
         echo "Done.\n";
         echo "\n-------------------------------\n";
         if ($freezeAfterFirst20 && !RedBeanDatabase::isFrozen()) {
             echo "Freezing database...\n";
             RedBeanDatabase::freeze();
         }
     }
 }
 /**
  * @depends testSearchByMultipleValuesCustomField
  */
 public function testSearchByTwoMultipleValuesCustomField()
 {
     if (!RedBeanDatabase::isFrozen()) {
         $quote = DatabaseCompatibilityUtil::getQuote();
         //Test where relatioon id is in a joining table.  Many to Many relationship
         $_FAKEPOST['TestOwnedCustomFieldsModel'] = array();
         $_FAKEPOST['TestOwnedCustomFieldsModel']['multipleIndustries']['values'] = array('A', 'B', 'C');
         $_FAKEPOST['TestOwnedCustomFieldsModel']['multipleSomethings']['values'] = array('D', 'E', 'F');
         $metadataAdapter = new SearchDataProviderMetadataAdapter(new TestOwnedCustomFieldsModel(false), 1, $_FAKEPOST['TestOwnedCustomFieldsModel']);
         $searchAttributeData = $metadataAdapter->getAdaptedMetadata();
         $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('TestOwnedCustomFieldsModel');
         $where = RedBeanModelDataProvider::makeWhere('TestOwnedCustomFieldsModel', $searchAttributeData, $joinTablesAdapter);
         $compareWhere = "(1 = (select 1 from {$quote}customfieldvalue{$quote} customfieldvalue " . "where {$quote}customfieldvalue{$quote}.{$quote}multiplevaluescustomfield_id{$quote} = " . "{$quote}multiplevaluescustomfield{$quote}.id " . "and {$quote}customfieldvalue{$quote}.{$quote}value{$quote} IN('A','B','C') limit 1))";
         // Not Coding Standard
         $compareWhere .= " and (1 = (select 1 from {$quote}customfieldvalue{$quote} customfieldvalue " . "where {$quote}customfieldvalue{$quote}.{$quote}multiplevaluescustomfield_id{$quote} = " . "{$quote}multiplevaluescustomfield1{$quote}.id " . "and {$quote}customfieldvalue{$quote}.{$quote}value{$quote} IN('D','E','F') limit 1))";
         // Not Coding Standard
         $this->assertEquals($compareWhere, $where);
         //Now test that the joinTablesAdapter has correct information.
         $this->assertEquals(0, $joinTablesAdapter->getFromTableJoinCount());
         $this->assertEquals(2, $joinTablesAdapter->getLeftTableJoinCount());
         $leftTables = $joinTablesAdapter->getLeftTablesAndAliases();
         $this->assertEquals('multiplevaluescustomfield', $leftTables[0]['tableName']);
         $this->assertEquals('multiplevaluescustomfield', $leftTables[1]['tableName']);
         //Now test that the subsetSQL query produced is correct.
         $subsetSql = TestOwnedCustomFieldsModel::makeSubsetOrCountSqlQuery('testcustomfieldsmodel', $joinTablesAdapter, 1, 5, $where, null);
         $compareSubsetSql = "select {$quote}testcustomfieldsmodel{$quote}.{$quote}id{$quote} id ";
         $compareSubsetSql .= "from {$quote}testcustomfieldsmodel{$quote} ";
         $compareSubsetSql .= "left join {$quote}multiplevaluescustomfield{$quote} on ";
         $compareSubsetSql .= "{$quote}multiplevaluescustomfield{$quote}.{$quote}id{$quote} = ";
         $compareSubsetSql .= "{$quote}testownedcustomfieldsmodel{$quote}.{$quote}multipleindustries_multiplevaluescustomfield_id{$quote} ";
         $compareSubsetSql .= "left join {$quote}multiplevaluescustomfield{$quote} multiplevaluescustomfield1 on ";
         $compareSubsetSql .= "{$quote}multiplevaluescustomfield1{$quote}.{$quote}id{$quote} = ";
         $compareSubsetSql .= "{$quote}testownedcustomfieldsmodel{$quote}.{$quote}multiplesomethings_multiplevaluescustomfield_id{$quote} ";
         $compareSubsetSql .= "where " . $compareWhere . ' ';
         $compareSubsetSql .= 'limit 5 offset 1';
         $this->assertEquals($compareSubsetSql, $subsetSql);
         //Make sure the sql runs properly.
         $dataProvider = new RedBeanModelDataProvider('TestOwnedCustomFieldsModel', null, false, $searchAttributeData);
         $data = $dataProvider->getData();
         $this->assertEquals(1, count($data));
     }
 }
 /**
  * @expectedException RedBean_Exception_SQL
  */
 public function testDropTableByTableName()
 {
     $testTableName = 'testimporttable';
     $sql = 'select * from ' . $testTableName;
     $tempTableData = R::getAll($sql);
     $this->assertEquals(4, count($tempTableData));
     if (RedBeanDatabase::isFrozen()) {
         ImportDatabaseUtil::dropTableByTableName($testTableName);
         $sql = 'select * from ' . $testTableName;
         R::getAll($sql);
     } else {
         //Unfrozen will not throw an exception in this type of situation.
         throw new RedBean_Exception_SQL();
     }
 }
 public static function setUpBeforeClass()
 {
     parent::setUpBeforeClass();
     // We need to unfreeze here as we are working with custom field values
     self::$freeze = false;
     if (RedBeanDatabase::isFrozen()) {
         RedBeanDatabase::unfreeze();
         self::$freeze = true;
     }
     SecurityTestHelper::createSuperAdmin();
     SecurityTestHelper::createUsers();
     self::$super = User::getByUsername('super');
     Yii::app()->user->userModel = self::$super;
     $currencies = Currency::getAll();
     $currencyValue1 = new CurrencyValue();
     $currencyValue1->value = 100;
     $currencyValue1->currency = $currencies[0];
     $multiDropDownCustomFieldData1 = new CustomFieldData();
     $multiDropDownCustomFieldData1->name = 'multiDropDown1';
     $multiDropDownCustomFieldData1->serializedData = serialize(array('Ten', 11, 'XII'));
     $saved = $multiDropDownCustomFieldData1->save();
     assert('$saved');
     // Not Coding Standard
     $multiDropDownCustomFieldValue1 = new CustomFieldValue();
     $multiDropDownCustomFieldValue1->value = 'Ten';
     $multiDropDownCustomFieldValue2 = new CustomFieldValue();
     $multiDropDownCustomFieldValue2->value = 11;
     $multiDropDownCustomFieldValue3 = new CustomFieldValue();
     $multiDropDownCustomFieldValue3->value = 'XII';
     $tagCustomFieldData1 = new CustomFieldData();
     $tagCustomFieldData1->name = 'tagCloud1';
     $tagCustomFieldData1->serializedData = serialize(array('Apache', 'PHP'));
     $saved = $tagCustomFieldData1->save();
     assert('$saved');
     // Not Coding Standard
     $tagCustomFieldValue1 = new CustomFieldValue();
     $tagCustomFieldValue1->value = 'PHP';
     $tagCustomFieldValue2 = new CustomFieldValue();
     $tagCustomFieldValue2->value = 'Apache';
     $primaryEmail1 = new Email();
     $primaryEmail1->emailAddress = "*****@*****.**";
     $primaryEmail1->isInvalid = true;
     $primaryEmail1->optOut = false;
     $secondaryEmail1 = new Email();
     $secondaryEmail1->emailAddress = "*****@*****.**";
     $secondaryEmail1->isInvalid = false;
     $secondaryEmail1->optOut = true;
     $address1 = new Address();
     $address1->street1 = "SomeStreet1";
     $address1->street2 = "SomeStreet2";
     $address1->city = "SomeCity";
     $address1->state = "SomeState";
     $address1->postalCode = 1111;
     $address1->country = "SomeCountry";
     $likeContactState1 = new ContactState();
     $likeContactState1->name = 'Customer';
     $likeContactState1->order = 0;
     $users = User::getAll();
     $user1 = new User();
     $user1->lastName = 'Kevin';
     $user1->hash = 'rieWoy3aijohP6chaigaokohs1oovohf';
     $user1->language = 'es';
     $user1->timeZone = 'America/Chicago';
     $user1->username = '******';
     $user1->currency = $currencies[0];
     $user1->manager = $users[0];
     //Custom attribute
     $attributeForm = new TextAttributeForm();
     $attributeForm->attributeName = 'custom';
     $attributeForm->attributeLabels = array('en' => 'test label en');
     $modelAttributesAdapterClassName = $attributeForm::getModelAttributeAdapterNameForSavingAttributeFormData();
     $adapter = new $modelAttributesAdapterClassName(new EmailTemplateModelTestItem());
     $adapter->setAttributeMetadataFromForm($attributeForm);
     $model = new EmailTemplateModelTestItem();
     $model->string = 'abc';
     $model->firstName = 'James';
     $model->lastName = 'Jackson';
     $model->phone = 1122334455;
     $model->boolean = true;
     $model->date = '2008-12-31';
     $model->dateTime = '2008-12-31 07:48:04';
     $model->textArea = 'Multiple Lines\\nOf Text';
     $model->url = 'http://www.zurmo.com/';
     $model->integer = 999;
     $model->float = 999.999;
     $model->currencyValue = $currencyValue1;
     $model->dropDown->value = "DropdownSelectedValue";
     $model->radioDropDown->value = "RadioDropdownSelectedValue";
     $model->primaryEmail = $primaryEmail1;
     $model->secondaryEmail = $secondaryEmail1;
     $model->primaryAddress = $address1;
     $model->likeContactState = $likeContactState1;
     $model->user = $user1;
     $model->multiDropDown->data = $multiDropDownCustomFieldData1;
     $model->tagCloud->data = $tagCustomFieldData1;
     $model->multiDropDown->values->add($multiDropDownCustomFieldValue1);
     $model->multiDropDown->values->add($multiDropDownCustomFieldValue2);
     $model->multiDropDown->values->add($multiDropDownCustomFieldValue3);
     $model->tagCloud->values->add($tagCustomFieldValue1);
     $model->tagCloud->values->add($tagCustomFieldValue2);
     $model->customCstm = 'text custom';
     $saved = $model->save();
     assert('$saved');
     // Not Coding Standard
     self::$emailTemplate = $model;
     // Update all values but do not save the model.
     $multiDropDownCustomFieldData2 = new CustomFieldData();
     $multiDropDownCustomFieldData2->name = 'multiDropDown2';
     $multiDropDownCustomFieldData2->serializedData = serialize(array('Thirteen', 14, 'XV'));
     $saved = $multiDropDownCustomFieldData2->save();
     assert('$saved');
     // Not Coding Standard
     $multiDropDownCustomFieldValue4 = new CustomFieldValue();
     $multiDropDownCustomFieldValue4->value = 'Thirteen';
     $multiDropDownCustomFieldValue5 = new CustomFieldValue();
     $multiDropDownCustomFieldValue5->value = 14;
     $multiDropDownCustomFieldValue6 = new CustomFieldValue();
     $multiDropDownCustomFieldValue6->value = 'XV';
     $tagCustomFieldData2 = new CustomFieldData();
     $tagCustomFieldData2->name = 'tagCloud2';
     $tagCustomFieldData2->serializedData = serialize(array('Nginx', 'Python'));
     $saved = $tagCustomFieldData2->save();
     assert('$saved');
     // Not Coding Standard
     $tagCustomFieldValue3 = new CustomFieldValue();
     $tagCustomFieldValue3->value = 'Python';
     $tagCustomFieldValue4 = new CustomFieldValue();
     $tagCustomFieldValue4->value = 'Nginx';
     self::$emailTemplate->string = 'def';
     self::$emailTemplate->firstName = 'Jane';
     self::$emailTemplate->lastName = 'Bond';
     self::$emailTemplate->phone = 66778899;
     self::$emailTemplate->boolean = false;
     self::$emailTemplate->date = '2009-12-31';
     self::$emailTemplate->dateTime = '2009-12-31 07:48:04';
     self::$emailTemplate->textArea = 'Multiple Lines\\nOf\\nText';
     self::$emailTemplate->url = 'http://www.zurmo.org/';
     self::$emailTemplate->integer = 888;
     self::$emailTemplate->float = 888.888;
     self::$emailTemplate->currencyValue->value = 99;
     self::$emailTemplate->dropDown->value = "DropdownSelectedVal";
     self::$emailTemplate->radioDropDown->value = "RadioDropdownSelectedVal";
     self::$emailTemplate->primaryEmail->emailAddress = "*****@*****.**";
     self::$emailTemplate->primaryEmail->isInvalid = false;
     self::$emailTemplate->primaryEmail->optOut = true;
     self::$emailTemplate->secondaryEmail->emailAddress = "*****@*****.**";
     self::$emailTemplate->secondaryEmail->isInvalid = true;
     self::$emailTemplate->secondaryEmail->optOut = false;
     self::$emailTemplate->primaryAddress->street1 = "SomeOtherStreet1";
     self::$emailTemplate->primaryAddress->street2 = "SomeOtherStreet2";
     self::$emailTemplate->primaryAddress->city = "SomeOtherCity";
     self::$emailTemplate->primaryAddress->state = "SomeOtherState";
     self::$emailTemplate->primaryAddress->postalCode = 2222;
     self::$emailTemplate->primaryAddress->country = "SomeOtherCountry";
     self::$emailTemplate->likeContactState->name = 'New';
     self::$emailTemplate->likeContactState->order = 1;
     self::$emailTemplate->user->lastName = 'Dean';
     self::$emailTemplate->user->hash = 'teo8eghaipaC5ahngahleiyaebofu6oo';
     self::$emailTemplate->user->language = 'en';
     self::$emailTemplate->user->timeZone = 'America/Denver';
     self::$emailTemplate->user->username = '******';
     self::$emailTemplate->multiDropDown->data = $multiDropDownCustomFieldData2;
     self::$emailTemplate->multiDropDown->values->remove($multiDropDownCustomFieldValue1);
     self::$emailTemplate->multiDropDown->values->remove($multiDropDownCustomFieldValue2);
     self::$emailTemplate->multiDropDown->values->remove($multiDropDownCustomFieldValue3);
     self::$emailTemplate->multiDropDown->values->add($multiDropDownCustomFieldValue4);
     self::$emailTemplate->multiDropDown->values->add($multiDropDownCustomFieldValue5);
     self::$emailTemplate->multiDropDown->values->add($multiDropDownCustomFieldValue6);
     self::$emailTemplate->tagCloud->data = $tagCustomFieldData2;
     self::$emailTemplate->tagCloud->values->remove($tagCustomFieldValue1);
     self::$emailTemplate->tagCloud->values->remove($tagCustomFieldValue2);
     self::$emailTemplate->tagCloud->values->add($tagCustomFieldValue3);
     self::$emailTemplate->tagCloud->values->add($tagCustomFieldValue4);
     self::$emailTemplate->customCstm = 'text custom changed';
     self::$content = 'Current: [[STRING]] [[FIRST^NAME]] [[LAST^NAME]] ' . '[[PHONE]] Old: [[WAS%STRING]] [[WAS%FIRST^NAME]] ' . '[[WAS%LAST^NAME]] [[WAS%PHONE]]';
     self::$compareContent = 'Current: def Jane Bond 66778899 Old: abc James ' . 'Jackson 1122334455';
 }
 public function testToggleStar()
 {
     if (!RedBeanDatabase::isFrozen()) {
         StarredUtil::createStarredTables();
         $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
         $account = new Account();
         $account->owner = $super;
         $account->name = 'Test Account';
         $account->officePhone = '1234567890';
         $this->assertTrue($account->save());
         $this->setGetArray(array('modelClassName' => 'Account', 'modelId' => $account->id));
         $content = $this->runControllerWithNoExceptionsAndGetContent('zurmo/default/toggleStar');
         $this->assertEquals('icon-star starred', $content);
         $this->assertTrue(StarredUtil::isModelStarred($account));
         $content = $this->runControllerWithNoExceptionsAndGetContent('zurmo/default/toggleStar');
         $this->assertEquals('icon-star unstarred', $content);
         $this->assertFalse(StarredUtil::isModelStarred($account));
     }
 }
 protected static function stripNonFrozenModeErrorHandlersIfFrozen($sql)
 {
     if (RedBeanDatabase::isFrozen()) {
         // It is deliberate that these regexs are written to not catch
         // handlers that are not written consistently with the existing
         // ones. If the assertions blow up look at making your handler
         // match the expression rather than messing with the expression.
         if (!YII_DEBUG) {
             $sql = preg_replace('/ +declare (continue|exit) handler for (1054|1146|1054, 1146).*?begin.*?end;\\n/s', '', $sql, -1, $count);
         } else {
             $matched = preg_match('/create (function|procedure) ([^( ]+)/', $sql, $matches);
             // Not Coding Standard
             assert('$matched == 1');
             $routineName = $matches[2];
             $sql = preg_replace('/( +declare (continue|exit) handler for (1054|1146|1054, 1146).*?begin.*?)(end;\\n)/s', "\\1    call write_log(\"{$routineName} failed! (\\3)\");\n                    \\4", $sql, -1, $count);
         }
         if (!YII_DEBUG) {
             assert('strpos($sql, "1146") == false');
             // Table  doesn't exist.
             assert('strpos($sql, "1054") == false');
             // Column doesn't exist.
         }
     }
     return $sql;
 }
 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;
 }
Exemple #30
0
 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;
 }