Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DO NOT MERGE][FOR QA] IBX-7911 IBX-8280 cumulative fix #1269

Closed
wants to merge 11 commits into from
9 changes: 9 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,9 @@ jobs:
dependency-versions: "highest"
composer-options: "--prefer-dist --no-progress"

- name: 'Use dev dependency'
run: composer req ibexa/core:'dev-ibx-7911-drop-magic-getters as 4.6.x-dev' ibexa/user:'dev-ibx-7911-drop-magic-getters as 4.6.x-dev'

- name: Setup problem matchers for PHPUnit
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"

Expand Down Expand Up @@ -113,6 +116,9 @@ jobs:
with:
dependency-versions: "highest"

- name: 'Use dev dependency'
run: composer req ibexa/core:'dev-ibx-7911-drop-magic-getters as 4.6.x-dev' ibexa/user:'dev-ibx-7911-drop-magic-getters as 4.6.x-dev'

- name: Setup problem matchers for PHPUnit
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"

Expand Down Expand Up @@ -168,6 +174,9 @@ jobs:
with:
dependency-versions: "highest"

- name: 'Use dev dependency'
run: composer req ibexa/core:'dev-ibx-7911-drop-magic-getters as 4.6.x-dev' ibexa/user:'dev-ibx-7911-drop-magic-getters as 4.6.x-dev'

- name: Setup problem matchers for PHPUnit
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"

Expand Down
17 changes: 17 additions & 0 deletions dependencies.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"recipesEndpoint": "",
"packages": [
{
"requirement": "dev-ibx-7911-drop-magic-getters as 4.6.x-dev",
"repositoryUrl": "https://github.com/ibexa/core",
"package": "ibexa/core",
"shouldBeAddedAsVCS": false
},
{
"requirement": "dev-ibx-7911-drop-magic-getters as 4.6.x-dev",
"repositoryUrl": "https://github.com/ibexa/user",
"package": "ibexa/user",
"shouldBeAddedAsVCS": false
}
]
}
49 changes: 47 additions & 2 deletions src/bundle/Controller/Content/ContentTreeController.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,14 @@
use Ibexa\AdminUi\REST\Value\ContentTree\Node;
use Ibexa\AdminUi\REST\Value\ContentTree\NodeExtendedInfo;
use Ibexa\AdminUi\REST\Value\ContentTree\Root;
use Ibexa\AdminUi\Siteaccess\SiteaccessResolverInterface;
use Ibexa\AdminUi\Specification\ContentType\ContentTypeIsUser;
use Ibexa\AdminUi\UI\Module\ContentTree\NodeFactory;
use Ibexa\Contracts\AdminUi\Permission\PermissionCheckerInterface;
use Ibexa\Contracts\Core\Limitation\Target;
use Ibexa\Contracts\Core\Repository\LocationService;
use Ibexa\Contracts\Core\Repository\PermissionResolver;
use Ibexa\Contracts\Core\Repository\Values\Content\Content;
use Ibexa\Contracts\Core\Repository\Values\Content\Location;
use Ibexa\Contracts\Core\Repository\Values\Content\Query;
use Ibexa\Contracts\Core\Repository\Values\User\Limitation;
Expand All @@ -44,20 +46,24 @@ class ContentTreeController extends RestController

private ConfigResolverInterface $configResolver;

private SiteaccessResolverInterface $siteaccessResolver;

public function __construct(
LocationService $locationService,
PermissionCheckerInterface $permissionChecker,
LookupLimitationsTransformer $lookupLimitationsTransformer,
NodeFactory $contentTreeNodeFactory,
PermissionResolver $permissionResolver,
ConfigResolverInterface $configResolver
ConfigResolverInterface $configResolver,
SiteaccessResolverInterface $siteaccessResolver
) {
$this->locationService = $locationService;
$this->permissionChecker = $permissionChecker;
$this->lookupLimitationsTransformer = $lookupLimitationsTransformer;
$this->contentTreeNodeFactory = $contentTreeNodeFactory;
$this->permissionResolver = $permissionResolver;
$this->configResolver = $configResolver;
$this->siteaccessResolver = $siteaccessResolver;
}

/**
Expand Down Expand Up @@ -145,7 +151,15 @@ public function loadNodeExtendedInfoAction(Location $location): NodeExtendedInfo
{
$locationPermissionRestrictions = $this->getLocationPermissionRestrictions($location);

return new NodeExtendedInfo($locationPermissionRestrictions);
$content = $location->getContent();
$versionInfo = $content->getVersionInfo();
$translations = $versionInfo->languageCodes;
$previewableTranslations = array_filter(
$translations,
fn (string $languageCode): bool => $this->isPreviewable($location, $content, $languageCode)
);

return new NodeExtendedInfo($locationPermissionRestrictions, $previewableTranslations);
}

/**
Expand Down Expand Up @@ -245,6 +259,37 @@ private function canUserHideContent(Location $location): bool
[$target]
);
}

/**
* @throws \Ibexa\Contracts\Core\Repository\Exceptions\BadStateException
* @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException
*/
private function isPreviewable(
Location $location,
Content $content,
string $languageCode
): bool {
$canPreview = $this->permissionResolver->canUser(
'content',
'versionread',
$content,
[$location]
);

if (!$canPreview) {
return false;
}

$versionNo = $content->getVersionInfo()->versionNo;

$siteAccesses = $this->siteaccessResolver->getSiteAccessesListForLocation(
$location,
$versionNo,
$languageCode
);

return !empty($siteAccesses);
}
}

class_alias(ContentTreeController::class, 'EzSystems\EzPlatformAdminUiBundle\Controller\Content\ContentTreeController');
2 changes: 1 addition & 1 deletion src/lib/EventListener/InContextTranslationListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public function setInContextTranslation(RequestEvent $event): void
return;
}

$inContextSetting = $this->userSettingService->getUserSetting('in_context_translation')->value;
$inContextSetting = $this->userSettingService->getUserSetting('in_context_translation')->getValue();

if ($inContextSetting !== InContextTranslation::ENABLED_OPTION) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public function visit(Visitor $visitor, Generator $generator, $data)

$generator->valueElement('translations', implode(',', $data->translations));

$generator->valueElement('previewableTranslations', implode(',', $data->previewableTranslations));
$generator->valueElement('mainLanguageCode', $data->mainLanguageCode);

$generator->startValueElement('name', $data->name);
$generator->endValueElement('name');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,27 @@ public function visit(Visitor $visitor, Generator $generator, $data): void
$visitor->setStatus(Response::HTTP_OK);

$this->buildPermissionNode($data->getPermissionRestrictions(), $generator);
$this->buildPreviewableTranslationsNode($data->getPreviewableTranslations(), $generator);

$generator->endObjectElement(self::MAIN_ELEMENT);
}

/**
* @param string[] $previewableTranslations
*/
protected function buildPreviewableTranslationsNode(
array $previewableTranslations,
Generator $generator
): void {
$generator->startHashElement('previewableTranslations');
$generator->startList('values');
foreach ($previewableTranslations as $value) {
$generator->valueElement('value', $value);
}
$generator->endList('values');
$generator->endHashElement('previewableTranslations');
}

/**
* @phpstan-param TPermissionRestrictions $permissionRestrictions
*/
Expand Down
10 changes: 4 additions & 6 deletions src/lib/REST/Value/ContentTree/Node.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,6 @@ class Node extends RestValue
/** @var string[] */
public array $translations;

/** @var string[] */
public array $previewableTranslations;

/** @var string */
public $name;

Expand Down Expand Up @@ -56,12 +53,13 @@ class Node extends RestValue

public string $pathString;

public string $mainLanguageCode;

/**
* @param int $depth
* @param int $locationId
* @param int $contentId
* @param string[] $translations
* @param string[] $previewableTranslations
* @param string $name
* @param string $contentTypeIdentifier
* @param bool $isContainer
Expand All @@ -76,7 +74,6 @@ public function __construct(
int $contentId,
int $versionNo,
array $translations,
array $previewableTranslations,
string $name,
string $contentTypeIdentifier,
bool $isContainer,
Expand All @@ -85,6 +82,7 @@ public function __construct(
int $totalChildrenCount,
int $reverseRelationsCount,
bool $isBookmarked,
string $mainLanguageCode,
array $children = [],
string $pathString = ''
) {
Expand All @@ -93,7 +91,6 @@ public function __construct(
$this->contentId = $contentId;
$this->versionNo = $versionNo;
$this->translations = $translations;
$this->previewableTranslations = $previewableTranslations;
$this->name = $name;
$this->isInvisible = $isInvisible;
$this->contentTypeIdentifier = $contentTypeIdentifier;
Expand All @@ -104,6 +101,7 @@ public function __construct(
$this->isBookmarked = $isBookmarked;
$this->children = $children;
$this->pathString = $pathString;
$this->mainLanguageCode = $mainLanguageCode;
}
}

Expand Down
17 changes: 16 additions & 1 deletion src/lib/REST/Value/ContentTree/NodeExtendedInfo.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,20 @@ final class NodeExtendedInfo extends RestValue
/** @phpstan-var TPermissionRestrictions|null */
private ?array $permissions;

/** @var string[] */
private array $previewableTranslations;

/**
* @phpstan-param TPermissionRestrictions|null $permissions
*
* @param string[] $previewableTranslation
*/
public function __construct(
?array $permissions = null
?array $permissions = null,
array $previewableTranslation = []
) {
$this->permissions = $permissions;
$this->previewableTranslations = $previewableTranslation;
}

/**
Expand All @@ -44,4 +51,12 @@ public function getPermissionRestrictions(): ?array
{
return $this->permissions;
}

/**
* @return string[]
*/
public function getPreviewableTranslations(): array
{
return $this->previewableTranslations;
}
}
2 changes: 1 addition & 1 deletion src/lib/Siteaccess/AbstractSiteaccessPreviewVoter.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public function vote(SiteaccessPreviewVoterContext $context): bool
$location = $context->getLocation();
$languageCode = $context->getLanguageCode();

if (empty(array_intersect($this->getRootLocationIds($siteAccess), $location->path))) {
if (empty(array_intersect($this->getRootLocationIds($siteAccess), $location->getPath()))) {
return false;
}

Expand Down
2 changes: 1 addition & 1 deletion src/lib/Siteaccess/SiteaccessResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public function getSiteAccessesListForLocation(
): array {
$contentInfo = $location->getContentInfo();
$versionInfo = $this->contentService->loadVersionInfo($contentInfo, $versionNo);
$languageCode = $languageCode ?? $contentInfo->mainLanguageCode;
$languageCode = $languageCode ?? $contentInfo->getMainLanguageCode();

$eligibleSiteAccesses = [];
/** @var \Ibexa\Core\MVC\Symfony\SiteAccess $siteAccess */
Expand Down
2 changes: 1 addition & 1 deletion src/lib/Strategy/ContentTypeThumbnailStrategy.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public function getThumbnail(
?VersionInfo $versionInfo = null
): ?Thumbnail {
try {
$contentTypeIcon = $this->contentTypeIconResolver->getContentTypeIcon($contentType->identifier);
$contentTypeIcon = $this->contentTypeIconResolver->getContentTypeIcon($contentType->getIdentifier());

return new Thumbnail([
'resource' => $contentTypeIcon,
Expand Down
Loading
Loading