Skip to content

Commit

Permalink
Merge pull request #7 from nucleos/dev
Browse files Browse the repository at this point in the history
Misc dev updates
  • Loading branch information
core23 committed Jan 19, 2020
2 parents 9826a32 + e609f72 commit 775ba85
Show file tree
Hide file tree
Showing 10 changed files with 94 additions and 26 deletions.
10 changes: 10 additions & 0 deletions phpstan-baseline.neon
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,16 @@ parameters:
count: 1
path: src/Action/LoginAction.php

-
message: "#^Property Nucleos\\\\UserAdminBundle\\\\Admin\\\\Model\\\\GroupAdmin\\:\\:\\$groupManager with generic interface Nucleos\\\\UserBundle\\\\Model\\\\GroupManagerInterface does not specify its types\\: GroupTemplate$#"
count: 1
path: src/Admin/Model/GroupAdmin.php

-
message: "#^Method Nucleos\\\\UserAdminBundle\\\\Admin\\\\Model\\\\GroupAdmin\\:\\:__construct\\(\\) has parameter \\$groupManager with generic interface Nucleos\\\\UserBundle\\\\Model\\\\GroupManagerInterface but does not specify its types\\: GroupTemplate$#"
count: 1
path: src/Admin/Model/GroupAdmin.php

-
message: "#^Call to an undefined method Symfony\\\\Component\\\\Config\\\\Definition\\\\Builder\\\\NodeDefinition\\:\\:children\\(\\)\\.$#"
count: 1
Expand Down
21 changes: 16 additions & 5 deletions src/Admin/Model/GroupAdmin.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@

namespace Nucleos\UserAdminBundle\Admin\Model;

use Nucleos\UserAdminBundle\Form\Type\SecurityRolesType;
use Nucleos\UserAdminBundle\Form\Type\RolesMatrixType;
use Nucleos\UserBundle\Model\GroupManagerInterface;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
Expand All @@ -28,11 +29,21 @@ abstract class GroupAdmin extends AbstractAdmin
'validation_groups' => 'Registration',
];

public function getNewInstance()
/**
* @var GroupManagerInterface
*/
private $groupManager;

public function __construct($code, $class, $baseControllerName, GroupManagerInterface $groupManager)
{
$class = $this->getClass();
parent::__construct($code, $class, $baseControllerName);

return new $class('', []);
$this->groupManager = $groupManager;
}

public function getNewInstance()
{
return $this->groupManager->createGroup('');
}

protected function configureListFields(ListMapper $listMapper): void
Expand Down Expand Up @@ -61,7 +72,7 @@ protected function configureFormFields(FormMapper $formMapper): void

->tab('Security')
->with('Roles', ['class' => 'col-md-12'])
->add('roles', SecurityRolesType::class, [
->add('roles', RolesMatrixType::class, [
'expanded' => true,
'multiple' => true,
'required' => false,
Expand Down
63 changes: 49 additions & 14 deletions src/Admin/Model/UserAdmin.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@

namespace Nucleos\UserAdminBundle\Admin\Model;

use Nucleos\UserAdminBundle\Form\Type\SecurityRolesType;
use DomainException;
use Nucleos\UserAdminBundle\Form\Type\RolesMatrixType;
use Nucleos\UserBundle\Model\LocaleAwareInterface;
use Nucleos\UserBundle\Model\UserInterface;
use Nucleos\UserBundle\Model\UserManagerInterface;
use Sonata\AdminBundle\Admin\AbstractAdmin;
Expand All @@ -22,7 +24,9 @@
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Form\Type\ModelType;
use Sonata\AdminBundle\Show\ShowMapper;
use Symfony\Component\Form\Extension\Core\Type\LocaleType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TimezoneType;
use Symfony\Component\Form\FormBuilderInterface;

abstract class UserAdmin extends AbstractAdmin
Expand All @@ -39,6 +43,27 @@ public function __construct($code, $class, $baseControllerName, UserManagerInter
$this->userManager = $userManager;
}

public function getNewInstance()
{
$instance = $this->userManager->createUser();

// TODO: Find a better way to create editable form models
// BC layer
try {
$instance->getUsername();
} catch (DomainException $exception) {
$instance->setUsername('');
}

try {
$instance->getEmail();
} catch (DomainException $exception) {
$instance->setEmail('');
}

return $instance;
}

public function getFormBuilder(): FormBuilderInterface
{
$this->formOptions['data_class'] = $this->getClass();
Expand Down Expand Up @@ -84,12 +109,13 @@ protected function configureListFields(ListMapper $listMapper): void
->add('email')
->add('groups')
->add('enabled', null, ['editable' => true])
->add('createdAt')
;

if ($this->isGranted('ROLE_ALLOWED_TO_SWITCH')) {
$listMapper
->add('impersonating', 'string', ['template' => '@NucleosUserAdmin/Admin/Field/impersonating.html.twig'])
->add('impersonating', 'string', [
'template' => '@NucleosUserAdmin/Admin/Field/impersonating.html.twig',
])
;
}
}
Expand All @@ -114,10 +140,6 @@ protected function configureShowFields(ShowMapper $showMapper): void
->with('Groups')
->add('groups')
->end()
->with('Security')
->add('token')
->add('twoStepVerificationCode')
->end()
;
}

Expand All @@ -126,12 +148,14 @@ protected function configureFormFields(FormMapper $formMapper): void
$formMapper
->tab('User')
->with('General', ['class' => 'col-md-6'])->end()
->ifTrue($this->isLocaleAwareSubject())
->with('Locale', ['class' => 'col-md-6'])->end()
->ifEnd()
->end()

->tab('Security')
->with('Groups', ['class' => 'col-md-8'])->end()
->with('Status', ['class' => 'col-md-4'])->end()
->with('Groups', ['class' => 'col-md-4'])->end()
->with('Keys', ['class' => 'col-md-4'])->end()
->with('Roles', ['class' => 'col-md-12'])->end()
->end()
;
Expand All @@ -145,6 +169,16 @@ protected function configureFormFields(FormMapper $formMapper): void
'required' => $this->isNewInstance(),
])
->end()
->ifTrue($this->isLocaleAwareSubject())
->with('Locale')
->add('locale', LocaleType::class, [
'required' => false,
])
->add('timezone', TimezoneType::class, [
'required' => false,
])
->end()
->ifEnd()
->end()

->tab('Security')
Expand All @@ -159,17 +193,13 @@ protected function configureFormFields(FormMapper $formMapper): void
])
->end()
->with('Roles')
->add('realRoles', SecurityRolesType::class, [
->add('roles', RolesMatrixType::class, [
'label' => 'form.label_roles',
'expanded' => true,
'multiple' => true,
'required' => false,
])
->end()
->with('Keys')
->add('token', null, ['required' => false])
->add('twoStepVerificationCode', null, ['required' => false])
->end()
->end()
;
}
Expand All @@ -178,4 +208,9 @@ private function isNewInstance(): bool
{
return !$this->hasSubject() || null === $this->getSubject()|| null === $this->id($this->getSubject());
}

private function isLocaleAwareSubject(): bool
{
return is_subclass_of($this->getClass(), LocaleAwareInterface::class);
}
}
1 change: 1 addition & 0 deletions src/Resources/config/admin_mongodb.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
<argument/>
<argument>%nucleos_user.model.group.class%</argument>
<argument>%nucleos_user_admin.admin.group.controller%</argument>
<argument type="service" id="nucleos_user.group_manager"/>
<call method="setTranslationDomain">
<argument>%nucleos_user_admin.admin.group.translation_domain%</argument>
</call>
Expand Down
1 change: 1 addition & 0 deletions src/Resources/config/admin_orm.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
<argument/>
<argument>%nucleos_user.model.group.class%</argument>
<argument>%nucleos_user_admin.admin.group.controller%</argument>
<argument type="service" id="nucleos_user.group_manager"/>
<call method="setTranslationDomain">
<argument>%nucleos_user_admin.admin.group.translation_domain%</argument>
</call>
Expand Down
8 changes: 4 additions & 4 deletions src/Resources/translations/NucleosUserAdminBundle.de.xliff
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,10 @@
<source>General</source>
<target>Allgemein</target>
</trans-unit>
<trans-unit id="group_locale">
<source>Locale</source>
<target>Ort</target>
</trans-unit>
<trans-unit id="group_profile">
<source>Profile</source>
<target>Profil</target>
Expand All @@ -306,10 +310,6 @@
<source>Roles</source>
<target>Rollen</target>
</trans-unit>
<trans-unit id="group_keys">
<source>Keys</source>
<target>Schlüssel</target>
</trans-unit>
<trans-unit id="group_security">
<source>Security</source>
<target>Sicherheit</target>
Expand Down
4 changes: 4 additions & 0 deletions src/Resources/translations/NucleosUserAdminBundle.en.xliff
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,10 @@
<source>General</source>
<target>General</target>
</trans-unit>
<trans-unit id="group_locale">
<source>Locale</source>
<target>Locale</target>
</trans-unit>
<trans-unit id="form_groups">
<source>Groups</source>
<target>Groups</target>
Expand Down
2 changes: 1 addition & 1 deletion src/Resources/views/Form/roles_matrix_list.html.twig
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{% for role, attributes in roles|sort %}
<li>{{ form_widget(attributes.form, {label: attributes.role_translated, value: attributes.role}) }}</li>
<li>{{ form_widget(attributes.form, {label: attributes.role_translated, translation_domain: false, value: attributes.role}) }}</li>
{% if not attributes.is_granted %}
<script>
$('input[value="{{ role }}"]').iCheck('disable');
Expand Down
8 changes: 7 additions & 1 deletion tests/Admin/Entity/GroupAdminTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,20 @@
namespace Nucleos\UserAdminBundle\Tests\Admin\Entity;

use Nucleos\UserAdminBundle\Admin\Entity\GroupAdmin;
use Nucleos\UserBundle\Model\GroupManagerInterface;
use PHPUnit\Framework\TestCase;
use Sonata\AdminBundle\Controller\CRUDController;

final class GroupAdminTest extends TestCase
{
public function testInstance(): void
{
$admin = new GroupAdmin('admin.group', 'Nucleos\UserAdminBundle\Model\Group', CRUDController::class);
$admin = new GroupAdmin(
'admin.group',
'Nucleos\UserAdminBundle\Model\Group',
CRUDController::class,
$this->createMock(GroupManagerInterface::class)
);

static::assertNotEmpty($admin);
}
Expand Down
2 changes: 1 addition & 1 deletion tests/App/Entity/TestUser.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
use Nucleos\UserBundle\Model\User;

/**
* @extends User<\Nucleos\UserBundle\Model\GroupInterface>
* @phpstan-extends User<\Nucleos\UserBundle\Model\GroupInterface>
*/
class TestUser extends User
{
Expand Down

0 comments on commit 775ba85

Please sign in to comment.