/**
  * {@inheritdoc}
  */
 public function configureOptions(OptionsResolver $resolver)
 {
     list($roles, $rolesReadOnly) = $this->rolesBuilder->getRoles();
     $resolver->setDefaults(array('choices' => function (Options $options, $parentChoices) use($roles) {
         return empty($parentChoices) ? array_flip($roles) : array();
     }, 'read_only_choices' => function (Options $options) use($rolesReadOnly) {
         return empty($options['choices']) ? $rolesReadOnly : array();
     }, 'data_class' => null));
 }
 /**
  * {@inheritdoc}
  */
 public function reverseTransform($selectedRoles)
 {
     if ($this->originalRoles === null) {
         throw new \RuntimeException('Invalid state, originalRoles array is not set');
     }
     list($availableRoles) = $this->rolesBuilder->getRoles();
     $hiddenRoles = array_diff($this->originalRoles, array_keys($availableRoles));
     return array_merge($selectedRoles, $hiddenRoles);
 }
 public function testWithNoSecurityToken()
 {
     $security = $this->getMock('Symfony\\Component\\Security\\Core\\SecurityContextInterface');
     $security->expects($this->any())->method('getToken')->will($this->returnValue(null));
     $pool = $this->getMockBuilder('Sonata\\AdminBundle\\Admin\\Pool')->disableOriginalConstructor()->getMock();
     $builder = new EditableRolesBuilder($security, $pool, array());
     list($roles, $rolesReadOnly) = $builder->getRoles();
     $this->assertEmpty($roles);
     $this->assertEmpty($rolesReadOnly);
 }