public function testProperlyDeletingActivityItems()
 {
     Yii::app()->user->userModel = User::getByUsername('super');
     $count = ZurmoRedBean::getRow('select count(*) count from activity_item');
     $this->assertEquals(0, $count['count']);
     $account = AccountTestHelper::createAccountByNameForOwner('anAccount', Yii::app()->user->userModel);
     $deleted = $account->delete();
     $this->assertTrue($deleted);
     $count = ZurmoRedBean::getRow('select count(*) count from activity_item');
     $this->assertEquals(0, $count['count']);
     $account2 = AccountTestHelper::createAccountByNameForOwner('anAccount2', Yii::app()->user->userModel);
     $opportunity = OpportunityTestHelper::createOpportunityByNameForOwner('anOpp', Yii::app()->user->userModel);
     $task = TaskTestHelper::createTaskWithOwnerAndRelatedAccount('aTask', Yii::app()->user->userModel, $account2);
     $task->activityItems->add($opportunity);
     $this->assertTrue($task->save());
     $taskId = $task->id;
     $task->forget();
     RedBeansCache::forgetAll();
     $count = ZurmoRedBean::getRow('select count(*) count from activity_item');
     $this->assertEquals(2, $count['count']);
     $deleted = $account2->delete();
     $this->assertTrue($deleted);
     $account2->forget();
     $count = ZurmoRedBean::getRow('select count(*) count from activity_item');
     $this->assertEquals(1, $count['count']);
     RedBeansCache::forgetAll();
     //Make sure things render ok even with the account deleted.
     $content = ActivitiesUtil::renderSummaryContent(Task::getById($taskId), 'someUrl', LatestActivitiesConfigurationForm::OWNED_BY_FILTER_ALL, 'HomeModule');
 }
Ejemplo n.º 2
0
 /**
  * @param string $username
  * @throws NotFoundException
  */
 public static function getByUsername($username)
 {
     assert('is_string($username)');
     assert('$username != ""');
     $bean = ZurmoRedBean::findOne('_user', "username = :username ", array(':username' => $username));
     assert('$bean === false || $bean instanceof RedBean_OODBBean');
     if ($bean === false) {
         throw new NotFoundException();
     }
     RedBeansCache::cacheBean($bean, static::getTableName() . $bean->id);
     return self::makeModel($bean);
 }
Ejemplo n.º 3
0
 public static function forgetAllCaches()
 {
     RedBeanModelsCache::forgetAll();
     RedBeansCache::forgetAll();
     PermissionsCache::forgetAll();
     RightsCache::forgetAll();
     PoliciesCache::forgetAll();
     GeneralCache::forgetAll();
     BeanModelCache::forgetAll();
     Currency::resetCaches();
     //php only cache
 }
 protected static function accountMungeDoesntChangeWhenRebuilt()
 {
     //Need to forget all since sometimes the related information is cached from
     //before something occurred during a test.
     RedBeanModelsCache::forgetAll();
     RedBeansCache::forgetAll();
     $beforeRows = self::getAccountMungeRows();
     ReadPermissionsOptimizationUtil::rebuild();
     $afterRows = self::getAccountMungeRows();
     if ($beforeRows != $afterRows) {
         echo "Before and after rebuild munge doesn't match.\n";
         self::echoRows($beforeRows);
         self::echoRows($afterRows);
     }
     return $beforeRows == $afterRows;
 }
 public function disabled_testMemcachingAccountsDirectly()
 {
     Yii::app()->user->userModel = User::getByUsername('super');
     $count = 50;
     $memcache = new Memcache();
     $memcache->connect('localhost', 11211);
     for ($i = 0; $i < $count; $i++) {
         $account = self::createRandomAccount($i);
         $this->assertTrue($account->save());
         // So that it has everything it should,
         // particularly its createdByUser.
         $this->assertTrue($memcache->set("M:{$i}", serialize($account)));
     }
     RedBeanModelsCache::forgetAll(true);
     RedBeansCache::forgetAll();
     Yii::app()->user->userModel = User::getByUsername('super');
     $memoryBefore = memory_get_usage(true);
     for ($i = 0; $i < $count; $i++) {
         $data = $memcache->get("M:{$i}");
         $this->assertTrue($data !== false);
         $account = unserialize($data);
         $this->assertTrue($account instanceof Account);
         $this->assertEquals("Account#{$i}", $account->name);
         $this->assertEquals("http://www.account{$i}.com", $account->website);
         $this->assertTrue($account->owner instanceof User);
         $this->assertEquals('super', $account->owner->username);
         $this->assertTrue($account->owner === Yii::app()->user->userModel);
         $this->assertTrue($account->createdByUser === Yii::app()->user->userModel);
         $this->assertTrue($account->modifiedByUser === Yii::app()->user->userModel);
         unset($account);
     }
     $memoryAfter = memory_get_usage(true);
     $this->assertWithinPercentage($memoryBefore, $memoryAfter, 10);
 }
Ejemplo n.º 6
0
 public function actionDeactivate($languageCode)
 {
     $languageData = LanguagesCollectionView::getLanguageDataByLanguageCode($languageCode);
     try {
         if (Yii::app()->languageHelper->deactivateLanguage($languageCode)) {
             $message = Zurmo::t('ZurmoModule', '{languageName} deactivated successfully', array('{languageName}' => $languageData['label']));
             $content = LanguagesCollectionView::renderFlashMessage($message);
             RedBeansCache::forgetAll();
             GeneralCache::forgetAll();
         }
     } catch (Exception $e) {
         $exceptionMessage = $e->getMessage();
         if (!empty($exceptionMessage)) {
             $message = Zurmo::t('ZurmoModule', '{languageName} deactivate failed. Error: {errorMessage}', array('{languageName}' => $languageData['label'], '{errorMessage}' => $exceptionMessage));
         } else {
             $message = Zurmo::t('ZurmoModule', '{languageName} deactivate failed. Unexpected error.', array('{languageName}' => $languageData['label']));
         }
         $content = LanguagesCollectionView::renderFlashMessage($message, true);
     }
     $view = new LanguagesCollectionView($this->getId(), $this->getModule()->getId());
     $content .= $view->renderLanguageRow($languageCode);
     echo $content;
 }
Ejemplo n.º 7
0
 /**
  * Forgets about the object so that if it is retrieved
  * again it will be recreated from the database. For use in testing.
  */
 public function forget()
 {
     self::forgetBeanModel(get_called_class());
     RedBeanModelsCache::forgetModel($this);
     RedBeansCache::forgetBean(self::getTableName(get_called_class()) . $this->id);
 }
Ejemplo n.º 8
0
 /**
  * Forget all cached beans.
  */
 public static function forgetAll()
 {
     if (PHP_CACHING_ON) {
         self::$beanIdentifiersToBeans = array();
     }
 }
Ejemplo n.º 9
0
 public function testMixedInPersonInUser()
 {
     $user = new User();
     $user->username = '******';
     $user->lastName = 'Dude';
     $this->assertTrue($user->save());
     $this->assertTrue($user->isAttribute('id'));
     // From RedBeanModel.
     $this->assertTrue($user->isAttribute('createdDateTime'));
     // From Item.
     $this->assertTrue($user->isAttribute('firstName'));
     // From Person.
     $this->assertTrue($user->isAttribute('username'));
     // From User.
     $this->assertTrue($user->isRelation('createdByUser'));
     // From Item.
     $this->assertTrue($user->isRelation('rights'));
     // From Permitable.
     $this->assertTrue($user->isRelation('title'));
     // From Person.
     $this->assertTrue($user->isRelation('manager'));
     // From User.
     unset($user);
     $user = User::getByUsername('dude');
     $this->assertTrue($user->isAttribute('id'));
     // From RedBeanModel.
     $this->assertTrue($user->isAttribute('createdDateTime'));
     // From Item.
     $this->assertTrue($user->isAttribute('firstName'));
     // From Person.
     $this->assertTrue($user->isAttribute('username'));
     // From User.
     $this->assertTrue($user->isRelation('createdByUser'));
     // From Item.
     $this->assertTrue($user->isRelation('rights'));
     // From Permitable.
     $this->assertTrue($user->isRelation('title'));
     // From Person.
     $this->assertTrue($user->isRelation('manager'));
     // From User.
     RedBeanModelsCache::cacheModel($user);
     $modelIdentifier = $user->getModelIdentifier();
     unset($user);
     RedBeanModelsCache::forgetAll(true);
     // Forget it at the php level.
     RedBeansCache::forgetAll();
     if (MEMCACHE_ON) {
         $user = RedBeanModelsCache::getModel($modelIdentifier);
         $this->assertTrue($user->isAttribute('id'));
         // From RedBeanModel.
         $this->assertTrue($user->isAttribute('createdDateTime'));
         // From Item.
         $this->assertTrue($user->isAttribute('firstName'));
         // From Person.
         $this->assertTrue($user->isAttribute('username'));
         // From User.
         $this->assertTrue($user->isRelation('createdByUser'));
         // From Item.
         $this->assertTrue($user->isRelation('rights'));
         // From Permitable.
         $this->assertTrue($user->isRelation('title'));
         // From Person.
         $this->assertTrue($user->isRelation('manager'));
         // From User.
     }
 }
 /**
  * @depends testUserAddedToRoleWhereUserIsMemberOfGroupWithChildrenGroups_Slide19
  */
 public function testUserAddedToRoleWhereUserIsMemberOfGroupWithChildrenGroups_Slide20()
 {
     $u1 = User::getByUsername('u1.');
     $u99 = User::getByUsername('u99.');
     Yii::app()->user->userModel = $u99;
     $u1->role = null;
     $this->assertTrue($u1->save());
     $g1 = Group::getByName('G1.');
     $g2 = Group::getByName('G2.');
     $g3 = Group::getByName('G3.');
     $g1->groups->add($g2);
     $this->assertTrue($g1->save());
     $g2->groups->add($g3);
     $this->assertTrue($g2->save());
     $g3->users->add($u1);
     $this->assertTrue($g3->save());
     $u1->forget();
     //Forget the user, so the user knows what groups it is part of.
     $u1 = User::getByUsername('u1.');
     $r1 = Role::getByName('R1.');
     $r2 = Role::getByName('R2.');
     $r3 = Role::getByName('R3.');
     $a1 = new Account();
     $a1->name = 'A1.';
     $a1->addPermissions($g1, Permission::READ);
     $this->assertTrue($a1->save());
     //Called in OwnedSecurableItem::afterSave();
     //ReadPermissionsOptimizationUtil::ownedSecurableItemCreated($a1);
     $a2 = new Account();
     $a2->name = 'A2.';
     $a2->addPermissions($g2, Permission::READ);
     $this->assertTrue($a2->save());
     //Called in OwnedSecurableItem::afterSave();
     //ReadPermissionsOptimizationUtil::ownedSecurableItemCreated($a2);
     $a3 = new Account();
     $a3->name = 'A3.';
     $a3->addPermissions($g3, Permission::READ);
     $this->assertTrue($a3->save());
     //Called in OwnedSecurableItem::afterSave();
     //ReadPermissionsOptimizationUtil::ownedSecurableItemCreated($a3);
     ReadPermissionsOptimizationUtil::securableItemGivenPermissionsForGroup($a1, $g1);
     ReadPermissionsOptimizationUtil::securableItemGivenPermissionsForGroup($a2, $g2);
     ReadPermissionsOptimizationUtil::securableItemGivenPermissionsForGroup($a3, $g3);
     $u1->role = $r1;
     $this->assertTrue($u1->save());
     //Called in $u1->afterSave();
     //ReadPermissionsOptimizationUtil::userAddedToRole($u1);
     $r1->forget();
     //Forget R1 so when it is utilized below, it will know that u1 is a member.
     $this->assertEquals(array(array('A1', 'G1', 1), array('A1', 'G2', 1), array('A1', 'G3', 1), array('A1', 'R2', 1), array('A1', 'R3', 1), array('A2', 'G2', 1), array('A2', 'G3', 1), array('A2', 'R2', 1), array('A2', 'R3', 1), array('A3', 'G3', 1), array('A3', 'R2', 1), array('A3', 'R3', 1)), self::getAccountMungeRows());
     $this->assertTrue(self::accountMungeDoesntChangeWhenRebuilt());
     $u1->forget();
     //Forget the user, so the user knows what groups it is part of.
     $u1 = User::getByUsername('u1.');
     $u1->role = null;
     $this->assertTrue($u1->save());
     RedBeanModelsCache::forgetAll();
     RedBeansCache::forgetAll();
     $this->assertEquals(array(array('A1', 'G1', 1), array('A1', 'G2', 1), array('A1', 'G3', 1), array('A2', 'G2', 1), array('A2', 'G3', 1), array('A3', 'G3', 1)), self::getAccountMungeRows());
     $this->assertTrue(self::accountMungeDoesntChangeWhenRebuilt());
     $a1->delete();
     $a2->delete();
     $a3->delete();
     $g1->group = null;
     $this->assertTrue($g1->save());
     $g2->group = null;
     $this->assertTrue($g2->save());
     $g3->forget();
     $g3 = Group::getByName('G3.');
     $g3->group = null;
     $g3->users->removeAll();
     $this->assertTrue($g3->save());
     $r1 = Role::getByName('R1.');
     $u1->role = $r1;
     $this->assertTrue($u1->save());
 }