/**
  * @depends testGetAllModelClassNames
  */
 public function testGetAllMungableModelClassNames()
 {
     $modelClassNames = PathUtil::getAllMungableModelClassNames();
     $compareData = array('Account', 'Campaign', 'Contact', 'Conversation', 'EmailMessage', 'EmailTemplate', 'ExportItem', 'GameReward', 'MarketingList', 'Meeting', 'Mission', 'Note', 'Opportunity', 'SavedReport', 'Product', 'SocialItem', 'Task', 'ContactWebForm', 'Project', 'SavedCalendar');
     $this->assertEquals($compareData, $modelClassNames);
     $modelClassNames2 = PathUtil::getAllMungableModelClassNames();
     $this->assertEquals($modelClassNames, $modelClassNames2);
     $modelClassNames3 = PathUtil::getAllMungableModelClassNames();
     $this->assertEquals($modelClassNames2, $modelClassNames3);
 }
 /**
  * @param User $user
  * @param Role $role
  */
 public static function userBeingRemovedFromRole(User $user, Role $role)
 {
     foreach (PathUtil::getAllMungableModelClassNames() as $modelClassName) {
         $mungeTableName = self::getMungeTableName($modelClassName);
         $userId = $user->id;
         $sql = "select securableitem_id\n                        from   ownedsecurableitem\n                        where  owner__user_id = {$userId}";
         $securableItemIds = ZurmoRedBean::getCol($sql);
         self::bulkDecrementParentRolesCounts($mungeTableName, $securableItemIds, $role);
         $sql = "select {$mungeTableName}.securableitem_id\n                        from   {$mungeTableName}, _group__user\n                        where  {$mungeTableName}.munge_id = concat('G', _group__user._group_id) and\n                               _group__user._user_id = {$userId}";
         $securableItemIds = ZurmoRedBean::getCol($sql);
         self::bulkDecrementParentRolesCounts($mungeTableName, $securableItemIds, $role);
         /*
          * This additional step I don't think is needed because the sql query above actually traps
          * the upstream explicit securableItems because the lower level groups will already have a point for
          * each of them.
             What groups are the user part of and what groups are those groups children of recursively?
             For any models that have that group explicity for read, subtract 1 point for the user's
             upstream roles from the disconnected role.
         */
         self::garbageCollect($mungeTableName);
     }
 }