Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/4.6'
Browse files Browse the repository at this point in the history
  • Loading branch information
tischsoic committed Jun 6, 2024
2 parents 26f130a + 49dccd1 commit d4fc6de
Show file tree
Hide file tree
Showing 16 changed files with 138 additions and 71 deletions.
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,4 +259,35 @@ 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()->getVersionNo();

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

return !empty($siteAccesses);
}
}
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,5 +101,6 @@ public function __construct(
$this->isBookmarked = $isBookmarked;
$this->children = $children;
$this->pathString = $pathString;
$this->mainLanguageCode = $mainLanguageCode;
}
}
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

0 comments on commit d4fc6de

Please sign in to comment.