function testTableFieldSaving() { $group = $this->objFromFixture('Group', 'a'); $tableField = new TableField("Permissions", "Permission", array("Code" => _t('SecurityAdmin.CODE', 'Code'), "Arg" => _t('SecurityAdmin.OPTIONALID', 'Optional ID')), array("Code" => "PermissionDropdownField", "Arg" => "TextField"), "GroupID", $group->ID); $form = new Form(new TableFieldTest_Controller(), "Form", new FieldSet($tableField), new FieldSet()); /* The field starts emppty. Save some new data. We have replicated the array structure that the specific layout of the form generates. */ $tableField->setValue(array('new' => array('Code' => array('CMS_ACCESS_CMSMain', 'CMS_ACCESS_AssetAdmin'), 'Arg' => array('1', '2')))); $tableField->saveInto($group); /* Let's check that the 2 permissions entries have been saved */ $permissions = $group->Permissions()->toDropdownMap('Arg', 'Code'); $this->assertEquals(array(1 => 'CMS_ACCESS_CMSMain', 2 => 'CMS_ACCESS_AssetAdmin'), $permissions); /* Now let's perform an update query */ $value = array(); foreach ($group->Permissions() as $permission) { $value[$permission->ID] = array("Code" => $permission->Code, "Arg" => $permission->Arg); } $value['new'] = array('Code' => array('CMS_ACCESS_NewsletterAdmin'), 'Arg' => array('3')); $tableField->setValue($value); $tableField->saveInto($group); /* Let's check that the 2 existing permissions entries, and the 1 new one, have been saved */ $permissions = $group->Permissions()->toDropdownMap('Arg', 'Code'); $this->assertEquals(array(1 => 'CMS_ACCESS_CMSMain', 2 => 'CMS_ACCESS_AssetAdmin', 3 => 'CMS_ACCESS_NewsletterAdmin'), $permissions); }
function testEdit() { $group = $this->objFromFixture('Group', 'group2_existing_perms'); $perm1 = $this->objFromFixture('Permission', 'perm1'); $perm2 = $this->objFromFixture('Permission', 'perm2'); $tableField = new TableField("Permissions", "Permission", array("Code" => 'Code', "Arg" => 'Arg'), array("Code" => "TextField", "Arg" => "TextField"), "GroupID", $group->ID); $form = new Form(new TableFieldTest_Controller(), "Form", new FieldList($tableField), new FieldList()); $this->assertEquals(2, $tableField->sourceItems()->Count()); // We have replicated the array structure that the specific layout of the form generates. $tableField->setValue(array($perm1->ID => array('Code' => 'Perm1 Modified', 'Arg' => '101'), $perm2->ID => array('Code' => 'Perm2 Modified', 'Arg' => '102'))); $tableField->saveInto($group); // Let's check that the 2 permissions entries have been saved $permissions = $group->Permissions()->map('Arg', 'Code'); $this->assertEquals(array(101 => 'Perm1 Modified', 102 => 'Perm2 Modified'), $permissions); }