Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 0 additions & 12 deletions phpstan-baseline.neon
Original file line number Diff line number Diff line change
Expand Up @@ -222,18 +222,6 @@ parameters:
count: 1
path: src/contracts/Mapper/SearchHitToContentSuggestionMapperInterface.php

-
message: '#^Method Ibexa\\Search\\Mapper\\PagerSearchContentToDataMapper\:\:map\(\) has parameter \$pager with generic class Pagerfanta\\Pagerfanta but does not specify its types\: T$#'
identifier: missingType.generics
count: 1
path: src/lib/Mapper/PagerSearchContentToDataMapper.php

-
message: '#^PHPDoc tag @var for variable \$searchHit contains generic class Ibexa\\Contracts\\Core\\Repository\\Values\\Content\\Search\\SearchHit but does not specify its types\: T$#'
identifier: missingType.generics
count: 1
path: src/lib/Mapper/PagerSearchContentToDataMapper.php

-
message: '#^Parameter \#1 \$array of function array_filter expects array, iterable\<Ibexa\\Contracts\\Core\\Repository\\Values\\Content\\Language\> given\.$#'
identifier: argument.type
Expand Down
2 changes: 2 additions & 0 deletions src/bundle/Resources/config/services.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,6 @@ services:
$translationHelper: '@Ibexa\Core\Helper\TranslationHelper'
$languageService: '@ibexa.api.service.language'

Ibexa\Contracts\Search\Mapper\PagerSearchDataMapper: '@Ibexa\Search\Mapper\PagerSearchContentToDataMapper'

Ibexa\Search\QueryType\SearchQueryType: ~
2 changes: 1 addition & 1 deletion src/bundle/Resources/config/views.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ services:
$viewConfigurator: '@Ibexa\Core\MVC\Symfony\View\Configurator\ViewProvider'
$viewParametersInjector: '@Ibexa\Core\MVC\Symfony\View\ParametersInjector\EventDispatcherInjector'
$searchService: '@ibexa.api.service.search'
$pagerSearchContentToDataMapper: '@Ibexa\Search\Mapper\PagerSearchContentToDataMapper'
$pagerSearchContentToDataMapper: '@Ibexa\Contracts\Search\Mapper\PagerSearchDataMapper'
$searchQueryType: '@Ibexa\Search\QueryType\SearchQueryType'
tags:
- { name: ibexa.view.builder }
24 changes: 24 additions & 0 deletions src/contracts/Mapper/PagerSearchDataMapper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?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\Contracts\Search\Mapper;

use Pagerfanta\Pagerfanta;

/**
* @template TData
*/
interface PagerSearchDataMapper
{
/**
* @param Pagerfanta<\Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchHit<\Ibexa\Contracts\Core\Repository\Values\Content\Content>> $pager
*
* @phpstan-return TData[]
*/
public function map(Pagerfanta $pager): array;
}
18 changes: 10 additions & 8 deletions src/lib/Mapper/PagerSearchContentToDataMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
use Ibexa\Contracts\Core\Repository\Values\Content\ContentInfo;
use Ibexa\Contracts\Core\Repository\Values\Content\Language;
use Ibexa\Contracts\Core\Repository\Values\User\User;
use Ibexa\Contracts\Search\Mapper\PagerSearchDataMapper;
use Ibexa\Core\Helper\TranslationHelper;
use Ibexa\Core\MVC\Symfony\Locale\UserLanguagePreferenceProviderInterface;
use Ibexa\Core\Repository\LocationResolver\LocationResolver;
Expand All @@ -39,16 +40,18 @@
* translation_language_code: string,
* resolvedLocation: \Ibexa\Contracts\Core\Repository\Values\Content\Location
* }
*
* @phpstan-implements PagerSearchDataMapper<TData>
*/
class PagerSearchContentToDataMapper
final class PagerSearchContentToDataMapper implements PagerSearchDataMapper
{
private ContentTypeService $contentTypeService;

private UserService $userService;

private UserLanguagePreferenceProviderInterface $userLanguagePreferenceProvider;

protected TranslationHelper $translationHelper;
private TranslationHelper $translationHelper;

private LanguageService $languageService;

Expand All @@ -71,14 +74,13 @@ public function __construct(
}

/**
* @phpstan-return TData[]
* @param Pagerfanta<\Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchHit<\Ibexa\Contracts\Core\Repository\Values\Content\Content>> $pager
*/
public function map(Pagerfanta $pager): array
{
$data = [];
$contentTypeIds = [];

/** @var \Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchHit $searchHit */
foreach ($pager as $searchHit) {
/** @var \Ibexa\Contracts\Core\Repository\Values\Content\Content $content */
$content = $searchHit->valueObject;
Expand Down Expand Up @@ -119,7 +121,7 @@ public function map(Pagerfanta $pager): array
*
* @return \Ibexa\Contracts\Core\Repository\Values\Content\Language[]
*/
protected function getAvailableTranslations(
private function getAvailableTranslations(
Content $content,
bool $filterDisabled = false
): iterable {
Expand All @@ -139,12 +141,12 @@ protected function getAvailableTranslations(
);
}

protected function isContentIsUser(Content $content): bool
private function isContentIsUser(Content $content): bool
{
return $this->userService->isUser($content);
}

protected function getContributor(ContentInfo $contentInfo): ?User
private function getContributor(ContentInfo $contentInfo): ?User
{
try {
return $this->userService->loadUser($contentInfo->ownerId);
Expand All @@ -157,7 +159,7 @@ protected function getContributor(ContentInfo $contentInfo): ?User
* @phpstan-param TData[] $data
* @phpstan-param int[] $contentTypeIds
*/
protected function setTranslatedContentTypesNames(array &$data, array $contentTypeIds): void
private function setTranslatedContentTypesNames(array &$data, array $contentTypeIds): void
{
// load list of content types with proper translated names
$contentTypes = iterator_to_array(
Expand Down
46 changes: 25 additions & 21 deletions src/lib/View/SearchViewBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,38 +10,42 @@

use Ibexa\Contracts\Core\Repository\SearchService;
use Ibexa\Contracts\Core\Repository\Values\Content\Language;
use Ibexa\Contracts\Search\Mapper\PagerSearchDataMapper;
use Ibexa\Core\MVC\Symfony\View\Builder\ViewBuilder;
use Ibexa\Core\MVC\Symfony\View\Configurator;
use Ibexa\Core\MVC\Symfony\View\ParametersInjector;
use Ibexa\Core\Pagination\Pagerfanta\ContentSearchHitAdapter;
use Ibexa\Core\QueryType\QueryType;
use Ibexa\Search\Mapper\PagerSearchContentToDataMapper;
use Pagerfanta\Pagerfanta;

class SearchViewBuilder implements ViewBuilder
{
private Configurator $viewConfigurator;

private ParametersInjector $viewParametersInjector;

private SearchService $searchService;

private PagerSearchContentToDataMapper $pagerSearchContentToDataMapper;

private QueryType $searchQueryType;

/**
* @param \Ibexa\Contracts\Search\Mapper\PagerSearchDataMapper<array{
* content: \Ibexa\Contracts\Core\Repository\Values\Content\Content,
* contentTypeId: int,
* contentId: int,
* name: string,
* language: string,
* contributor: \Ibexa\Contracts\Core\Repository\Values\User\User|null,
* version: int,
* content_type: \Ibexa\Contracts\Core\Repository\Values\ContentType\ContentType,
* modified: \DateTimeInterface,
* initialLanguageCode: string,
* content_is_user: bool,
* available_enabled_translations: iterable<\Ibexa\Contracts\Core\Repository\Values\Content\Language>,
* available_translations: iterable<\Ibexa\Contracts\Core\Repository\Values\Content\Language>,
* translation_language_code: string,
* resolvedLocation: \Ibexa\Contracts\Core\Repository\Values\Content\Location
* }> $pagerSearchContentToDataMapper
*/
public function __construct(
Configurator $viewConfigurator,
ParametersInjector $viewParametersInjector,
SearchService $searchService,
PagerSearchContentToDataMapper $pagerSearchContentToDataMapper,
QueryType $searchQueryType
private readonly Configurator $viewConfigurator,
private readonly ParametersInjector $viewParametersInjector,
private readonly SearchService $searchService,
private readonly PagerSearchDataMapper $pagerSearchContentToDataMapper,
private readonly QueryType $searchQueryType
) {
$this->viewConfigurator = $viewConfigurator;
$this->viewParametersInjector = $viewParametersInjector;
$this->searchService = $searchService;
$this->pagerSearchContentToDataMapper = $pagerSearchContentToDataMapper;
$this->searchQueryType = $searchQueryType;
}

public function matches($argument): bool
Expand Down
Loading