public function processRecord($record, $columnMap, &$results, $preview = false)
 {
     $objID = parent::processRecord($record, $columnMap, $results, $preview);
     $_cache_groupByCode = array();
     // Add to predefined groups
     /** @var Member $member */
     $member = DataObject::get_by_id($this->objectClass, $objID);
     foreach ($this->groups as $group) {
         // TODO This isnt the most memory effective way to add members to a group
         $member->Groups()->add($group);
     }
     // Add to groups defined in CSV
     if (isset($record['Groups']) && $record['Groups']) {
         $groupCodes = explode(',', $record['Groups']);
         foreach ($groupCodes as $groupCode) {
             $groupCode = Convert::raw2url($groupCode);
             if (!isset($_cache_groupByCode[$groupCode])) {
                 $group = Group::get()->filter('Code', $groupCode)->first();
                 if (!$group) {
                     $group = new Group();
                     $group->Code = $groupCode;
                     $group->Title = $groupCode;
                     $group->write();
                 }
                 $member->Groups()->add($group);
                 $_cache_groupByCode[$groupCode] = $group;
             }
         }
     }
     $member->destroy();
     unset($member);
     return $objID;
 }
 public function testCollateAncestorIDs()
 {
     $parentGroup = $this->objFromFixture('SilverStripe\\Security\\Group', 'parentgroup');
     $childGroup = $this->objFromFixture('SilverStripe\\Security\\Group', 'childgroup');
     $orphanGroup = new Group();
     $orphanGroup->ParentID = 99999;
     $orphanGroup->write();
     $this->assertEquals(1, count($parentGroup->collateAncestorIDs()), 'Root node only contains itself');
     $this->assertContains($parentGroup->ID, $parentGroup->collateAncestorIDs());
     $this->assertEquals(2, count($childGroup->collateAncestorIDs()), 'Contains parent nodes, with child node first');
     $this->assertContains($parentGroup->ID, $childGroup->collateAncestorIDs());
     $this->assertContains($childGroup->ID, $childGroup->collateAncestorIDs());
     $this->assertEquals(1, count($orphanGroup->collateAncestorIDs()), 'Orphaned nodes dont contain invalid parent IDs');
     $this->assertContains($orphanGroup->ID, $orphanGroup->collateAncestorIDs());
 }
 public function testOverwriteExistingImport()
 {
     $existinggroup = new Group();
     $existinggroup->Title = 'Old Group Title';
     $existinggroup->Code = 'newgroup1';
     $existinggroup->write();
     $loader = new GroupCsvBulkLoader();
     $results = $loader->load($this->getCurrentRelativePath() . '/GroupCsvBulkLoaderTest.csv');
     $created = $results->Created()->toArray();
     $this->assertEquals(count($created), 1);
     $this->assertEquals($created[0]->Code, 'newchildgroup1');
     $updated = $results->Updated()->toArray();
     $this->assertEquals(count($updated), 1);
     $this->assertEquals($updated[0]->Code, 'newgroup1');
     $this->assertEquals($updated[0]->Title, 'New Group 1');
 }
 /**
  * Adds the member to a group. This will create the group if the given
  * group code does not return a valid group object.
  *
  * @param string $groupcode
  * @param string $title Title of the group
  */
 public function addToGroupByCode($groupcode, $title = "")
 {
     $group = DataObject::get_one('SilverStripe\\Security\\Group', array('"Group"."Code"' => $groupcode));
     if ($group) {
         $this->Groups()->add($group);
     } else {
         if (!$title) {
             $title = $groupcode;
         }
         $group = new Group();
         $group->Code = $groupcode;
         $group->Title = $title;
         $group->write();
         $this->Groups()->add($group);
     }
 }
 /**
  * Test Member_GroupSet::add
  */
 public function testOnChangeGroupsBySetIDList()
 {
     $staffMember = $this->objFromFixture('SilverStripe\\Security\\Member', 'staffmember');
     // Setup new admin group
     $newAdminGroup = new Group(array('Title' => 'newadmin'));
     $newAdminGroup->write();
     Permission::grant($newAdminGroup->ID, 'ADMIN');
     // Test staff member can't be added to admin groups
     $this->assertFalse($staffMember->inGroup($newAdminGroup));
     $staffMember->Groups()->setByIDList(array($newAdminGroup->ID));
     $this->assertFalse($staffMember->inGroup($newAdminGroup), 'Adding new admin group relation is not allowed for non-admin members');
 }
 /**
  * Add default records to database.
  *
  * This function is called whenever the database is built, after the
  * database tables have all been created.
  */
 public function requireDefaultRecords()
 {
     parent::requireDefaultRecords();
     // Add default author group if no other group exists
     $allGroups = DataObject::get('SilverStripe\\Security\\Group');
     if (!$allGroups->count()) {
         $authorGroup = new Group();
         $authorGroup->Code = 'content-authors';
         $authorGroup->Title = _t('Group.DefaultGroupTitleContentAuthors', 'Content Authors');
         $authorGroup->Sort = 1;
         $authorGroup->write();
         Permission::grant($authorGroup->ID, 'CMS_ACCESS_CMSMain');
         Permission::grant($authorGroup->ID, 'CMS_ACCESS_AssetAdmin');
         Permission::grant($authorGroup->ID, 'CMS_ACCESS_ReportAdmin');
         Permission::grant($authorGroup->ID, 'SITETREE_REORGANISE');
     }
     // Add default admin group if none with permission code ADMIN exists
     $adminGroups = Permission::get_groups_by_permission('ADMIN');
     if (!$adminGroups->count()) {
         $adminGroup = new Group();
         $adminGroup->Code = 'administrators';
         $adminGroup->Title = _t('Group.DefaultGroupTitleAdministrators', 'Administrators');
         $adminGroup->Sort = 0;
         $adminGroup->write();
         Permission::grant($adminGroup->ID, 'ADMIN');
     }
     // Members are populated through Member->requireDefaultRecords()
 }