Skip to content

Commit

Permalink
Merge pull request from GHSA-pcpm-vc4v-cmvx
Browse files Browse the repository at this point in the history
  • Loading branch information
ViniTou committed Nov 10, 2022
1 parent 390997c commit 29e156a
Show file tree
Hide file tree
Showing 7 changed files with 199 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/bundle/Resources/config/services.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ imports:
- { resource: services/events.yaml }
- { resource: services/twig.yaml }
- { resource: services/autosave.yaml }
- { resource: services/role_form_mappers.yaml }

services:
_defaults:
Expand Down
19 changes: 19 additions & 0 deletions src/bundle/Resources/config/services/role_form_mappers.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -223,3 +223,22 @@ services:
tags:
- { name: ez.limitation.formMapper, limitationType: Subtree }
- { name: ez.limitation.valueMapper, limitationType: Subtree }

Ibexa\AdminUi\Limitation\Mapper\MemberOfLimitationMapper:
parent: ezplatform.content_forms.limitation.form_mapper.multiple_selection
arguments:
$userService: '@ezpublish.api.service.user'
$repository: '@ezpublish.api.repository'
$contentService: '@ezpublish.api.service.content'
$translator: '@translator'
tags:
- { name: ez.limitation.formMapper, limitationType: MemberOf }
- { name: ez.limitation.valueMapper, limitationType: MemberOf }

Ibexa\AdminUi\Limitation\Mapper\RoleLimitationMapper:
parent: ezplatform.content_forms.limitation.form_mapper.multiple_selection
arguments:
$roleService: '@ezpublish.api.service.role'
tags:
- { name: ez.limitation.formMapper, limitationType: Role }
- { name: ez.limitation.valueMapper, limitationType: Role }
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@
<target>Language</target>
<note>key: policy.limitation.identifier.language</note>
</trans-unit>
<trans-unit id="b40e3e09e55ef852a5d9e1592e9c895715b1313c" resname="policy.limitation.identifier.memberof">
<source>MemberOf</source>
<target>MemberOf</target>
<note>key: policy.limitation.identifier.memberof</note>
</trans-unit>
<trans-unit id="ab9163a435d32610a7a1af8df07ab38eebc4c7c6" resname="policy.limitation.identifier.newsection">
<source>New Section</source>
<target>New Section</target>
Expand Down Expand Up @@ -71,6 +76,11 @@
<target>PersonalizationAccess</target>
<note>key: policy.limitation.identifier.personalizationaccess</note>
</trans-unit>
<trans-unit id="9f2e53e094725bbc243ad777547724ab923a31d1" resname="policy.limitation.identifier.role">
<source>Role</source>
<target>Role</target>
<note>key: policy.limitation.identifier.role</note>
</trans-unit>
<trans-unit id="bb77b27363dad566197a200290f0f0b18baa4705" resname="policy.limitation.identifier.section">
<source>Section</source>
<target>Section</target>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@
<target state="new">Self</target>
<note>key: policy.limitation.group.self</note>
</trans-unit>
<trans-unit id="e797dbd775ecc5788f41ceeb960b70a9d7a116ca" resname="policy.limitation.member_of.self_user_group">
<source>Self</source>
<target state="new">Self</target>
<note>key: policy.limitation.member_of.self_user_group</note>
</trans-unit>
<trans-unit id="cc7c597ffa43ef724b881b127a4124fd35c8c6f6" resname="policy.limitation.owner.self">
<source>Self</source>
<target state="new">Self</target>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,3 +116,15 @@
{{ values|join(', ') }}
{% endapply %}
{% endblock %}

{% block ez_limitation_memberof_value %}
{% apply spaceless %}
{{ values|join(', ') }}
{% endapply %}
{% endblock %}

{% block ez_limitation_role_value %}
{% apply spaceless %}
{{ values|join(', ') }}
{% endapply %}
{% endblock %}
105 changes: 105 additions & 0 deletions src/lib/Limitation/Mapper/MemberOfLimitationMapper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
<?php

/**
* @copyright Copyright (C) Ibexa AS. All rights reserved.
* @license For full copyright and license information view LICENSE file distributed with this source code.
*/
declare(strict_types=1);

namespace Ibexa\AdminUi\Limitation\Mapper;

use eZ\Publish\API\Repository\ContentService;
use eZ\Publish\API\Repository\Repository;
use eZ\Publish\API\Repository\UserService;
use eZ\Publish\API\Repository\Values\Content\Query\Criterion\ContentTypeIdentifier;
use eZ\Publish\API\Repository\Values\Content\Query\SortClause\ContentName;
use eZ\Publish\API\Repository\Values\Filter\Filter;
use eZ\Publish\API\Repository\Values\User\Limitation;
use EzSystems\EzPlatformAdminUi\Limitation\LimitationValueMapperInterface;
use EzSystems\EzPlatformAdminUi\Limitation\Mapper\MultipleSelectionBasedMapper;
use Ibexa\Core\Limitation\MemberOfLimitationType;
use Symfony\Contracts\Translation\TranslatorInterface;

final class MemberOfLimitationMapper extends MultipleSelectionBasedMapper implements LimitationValueMapperInterface
{
/** @var \eZ\Publish\API\Repository\UserService */
private $userService;

/** @var \eZ\Publish\API\Repository\Repository */
private $repository;

/** @var \eZ\Publish\API\Repository\ContentService */
private $contentService;

/** @var \Symfony\Contracts\Translation\TranslatorInterface */
private $translator;

public function __construct(
UserService $userService,
Repository $repository,
ContentService $contentService,
TranslatorInterface $translator
) {
$this->userService = $userService;
$this->repository = $repository;
$this->contentService = $contentService;
$this->translator = $translator;
}

protected function getSelectionChoices(): array
{
$userGroups = $this->loadUserGroups();
$choices = [];
$choices[MemberOfLimitationType::SELF_USER_GROUP] = $this->getSelfUserGroupLabel();

foreach ($userGroups as $userGroup) {
$choices[$userGroup->id] = $userGroup->getName();
}

return $choices;
}

public function mapLimitationValue(Limitation $limitation): array
{
$values = [];
foreach ($limitation->limitationValues as $groupId) {
if ((int)$groupId === MemberOfLimitationType::SELF_USER_GROUP) {
$values[] = $this->getSelfUserGroupLabel();
continue;
}
$values[] = $this->userService->loadUserGroup((int)$groupId)->getName();
}

return $values;
}

/**
* @return \eZ\Publish\API\Repository\Values\User\UserGroup[]
*/
private function loadUserGroups(): array
{
return $this->repository->sudo(function () {
$filter = new Filter();
$filter->withCriterion(new ContentTypeIdentifier('user_group'));
$filter->withSortClause(new ContentName());
$results = $this->contentService->find($filter);

$groups = [];
foreach ($results as $result) {
$groups[] = $this->userService->loadUserGroup($result->id);
}

return $groups;
});
}

private function getSelfUserGroupLabel(): string
{
return $this->translator->trans(
/** @Desc("Self") */
'policy.limitation.member_of.self_user_group',
[],
'ezplatform_content_forms_role'
);
}
}
47 changes: 47 additions & 0 deletions src/lib/Limitation/Mapper/RoleLimitationMapper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php

/**
* @copyright Copyright (C) Ibexa AS. All rights reserved.
* @license For full copyright and license information view LICENSE file distributed with this source code.
*/
declare(strict_types=1);

namespace Ibexa\AdminUi\Limitation\Mapper;

use eZ\Publish\API\Repository\RoleService;
use eZ\Publish\API\Repository\Values\User\Limitation;
use EzSystems\EzPlatformAdminUi\Limitation\LimitationValueMapperInterface;
use EzSystems\EzPlatformAdminUi\Limitation\Mapper\MultipleSelectionBasedMapper;

final class RoleLimitationMapper extends MultipleSelectionBasedMapper implements LimitationValueMapperInterface
{
/** @var \eZ\Publish\API\Repository\RoleService */
private $roleService;

public function __construct(
RoleService $roleService
) {
$this->roleService = $roleService;
}

protected function getSelectionChoices(): array
{
$choices = [];
foreach ($this->roleService->loadRoles() as $role) {
$choices[$role->id] = $role->identifier;
}

return $choices;
}

public function mapLimitationValue(Limitation $limitation): array
{
$values = [];

foreach ($limitation->limitationValues as $roleId) {
$values[] = $this->roleService->loadRole((int)$roleId)->identifier;
}

return $values;
}
}

0 comments on commit 29e156a

Please sign in to comment.